1.js 无块作用域。
while(true){
var num=10;
break;
}
console.log(num);
2.作用域 由里到外,层层调用。
3.闭包模式:函数内中包含函数。函数内置包含对象。
闭包的作用:缓存数据,如 s.但延长了作用域,一般情况下s 作为局部变量,在f4()函数运行结束后,内存释放。但由于闭包,ff(),s 的值未能释放。
function f4(){
var s=100;
return function f2(){
s++;
return s;
}
}
var ff=f4();
console.log(ff());
console.log(ff());
console.log(ff);
result:[Web浏览器] "101" /frontEnd/bind/include.html (42)
[Web浏览器] "102" /frontEnd/bind/include.html (43)
[Web浏览器] "function f2(){
s++;
return s;
}" /frontEnd/bind/include.html (44)
4.沙箱
写在函数内相对独立的一块,里面定义的都是局部变量,可以访问外面的全局变量。里面的声明的变量及对象具有预编译的作用。eg:
var num="456";
(function(){
console.log(num); //声明会提前,但是未赋值, 因此输出 undefined
var num="123";
}());
result:[Web浏览器] "undefined" /frontEnd/bind/sandbox.html (11)
沙箱 可以避免变量与函数名相同出错的问题,可把重名的部分函数及代码块放入沙箱中。
(function(){
}());
5.遍历DOM 树。
var root=document.docuementElement; 得到 根节点
var children=root.children; 得到子节点的集合。
<script>
var root=document.documentElement;
// console.log(root.nodeName);
//找打所有子节点
function findChildren(root){
var children=root.children; //root.children 输出节点 root.chilrdenNodes 非IE输出节点和#text
for(var i=0;i<children.length;i++){
var childrenNode=children[i];
console.log(childrenNode.nodeName);
travalChildren(childrenNode);
}
}
// findChildren(root);
//遍历所有子节点的函数
function travalChildren(childrenNode){
childrenNode.children&&findChildren(childrenNode);
}
findChildren(root);
</script>
6.真数组与伪数组。
真数组长度可变,假数组长度不可变。
var ss=[10,20,30];
console.log(ss.length); =========》3
ss[3]=40;
console.log(ss.length); =========》4
console.log(ss[0]); =========》10;
对象:伪数组
var st={
0:10,
1:20,
2:30,
length:3
};
console.log(st[0]); ==========》10;
console.log(st.length); ==========》3
真数组能使用数组中的方法,伪数组可以使用数组中的方法。
ss.forEach(function(ele){
console.log(ele+1); ====》11,21,31,41;
});
function f1(){
var sum=0;
// for(var i in arguments){
// sum+=arguments[i];
// }
arguments.forEach(function(){ =========》报错;
});
return sum;
}
console.log(f1(1,2,3));