JavaScript函数和作用域
---恢复内容开始---
一、创造函数的三种方式:
1、函数声明:function add(a,b){...}
2、函数表达式:
匿名式:var add=function(a,b){...}
命名式:var add=function foo(a,b){...}
立即执行:(function(){...})();
返回值:return function(){...};
3、函数构造器:var func=new Function(...) 函数体里的变量是局部变量 不常用
二、函数声明可以在任何位置调用,函数表达式只能在其之后调用
三、命名函数表达式(NFE):调试|递归调用 不常用
闭包中的易错点:
document.body.innerHTML = "<div id=div1>aaa</div>" + "<div id=div2>bbb</div><div id=div3>ccc</div>"; for (var i = 1; i < 4; i++) { document.getElementById('div' + i). addEventListener('click', function() { alert(i); // all are 4! }); } document.body.innerHTML = "<div id=div1>aaa</div>" + "<div id=div2>bbb</div><div id=div3>ccc</div>"; for (var i = 1; i < 4; i++) { !function(i) { document.getElementById('div' + i). addEventListener('click', function() { alert(i); // 1, 2, 3 }); }(
作用域链
function outer2() { var local2 = 1; function outer1() { var local1 = 1; // visit local1, local2 or global3 } outer1(); } var global3 = 1; outer2(); function outer() { var i = 1; var func = new Function("console.log(typeof i);"); func(); // undefined} outer();
函数初始化阶段顺序: 1. 函数参数初始化,如果没有传入实参,初始化该参数值为undefined. 2. 函数声明 ,如果发生命名冲突,会覆盖 上另一个命名。 3. 变量声明, 初始化变量的值都为 undefined. 若发生命名冲突会被忽略。

浙公网安备 33010602011771号