narquee 实现信息滚动
deocument.write(" \
");代码太长可以用\折行
测试:
document.write();
console.log();
alert();
firstName(小驼峰)
FirstName(大驼峰)
isNaN();
typeof undefined undefined
typeof NaN number
0/undfined/null/NaN---false(隐士转换 Boolean)
undefined——‘undefined’ null---‘null’ true---“true” (隐士转换 String)
创建词法环境:扫描js中的两部分@用声明方式创建的函数(function xx(){}) @用var定义的变量(var a=3;)
命名冲突的时候:函数名大于变量名 函数下面的会覆盖上面的 变量相同只认第一个
LexicalEnvironment:{
a:undefined
xxx:对函数的引用
}
函数预处理:函数每次调用都产生一个LexicalEnvironment
函数中的参数,在调用时,已成为词法环境的成员。
eg:function(a,b){
alert(a);
alert(b);
function a(){
alert(a);
}
}
f(1,2);
调用之前:
LexicalEnvironment{
a:1(后改为指向函数的引用)
b:2,
argumnets:实参个数
}
函数中无war声明的变量会变成全局变量
函数中的变量全局不可访问,只属于函数词法环境中
词法作用域(静态作用域,在声明时已经确定相关作用域)、
@给函数本身添加【【scope】】
f[[scope]]==window
@函数真正执行时
f会创建自己的词法环境
f.le---->f[[scope]]
eg:function f(){
var x=10;
function g(){
g();
}
}
g.le-->g.[[scope]]-->f.le---->f.[[scope]]--->window
注意:用new Function()创建的函数,函数的g[[scope]]===window
闭包:CLosure Varible
闭包即一个对象(包含子函数,变量)
闭包的本质即作用域,闭包的好处:封装,防止全局污染,减少传参。
每次调用父函数,就会产生新的闭包。
相互关联的词法环境,必须同时停止时,才能全部停止。
若子函数未用到父函数的变量,则不会产生闭包
eg:function(){ 作用域的用途,线性隐藏
var a=5;
var b=6;
function f(){}
window.f=f;
}
闭包解决循环问题(函数一旦调用,就会产生新的闭包)
for(var i=0;i>10;i++){
ele.onclick=(function(i){
return function(){
alert(i);
}
})(i)
}
OOP(oriented object programming)面向对象编程
1,自己创建变量:
var p={};
var p={name: , age: , get age(){return this.age;
},set age(val){
this.age=val;
}} ;
p.age ======= p["age"]
p.a=====无a属性出现,结果undefined
2,Object()函数创建变量
var o=new Object();
o.toString();继承父类的东西。
给对象加成员,对象属性
Object.defineProperty(对象,属性,{value: ,writable: 。。。}); 默认所有属性特性为false
Object.defineProperties(对象,{属性:{ value: , get:function(){ ....}}, 属性:{ value: , get:function(){ ....}}
});
对象的操作:成员遍历
for(xs in p){
xs 属性名
p[]
}
throw new Error("...........")
属性级联
var res=p&& p.addresss && p.adddress.home; 一个false,返回false的值。 全为true返回最后一个值
|| 返回第一个true值,全为false取最后的值