经验总结:
1、变量的声明被提前到作用域顶部,赋值保留在原地;
2、函数声明整个被提前;
3、函数作为值整个赋给变量时,只有变量“被提前”了,函数没有“被提前”。
作为最佳实践:
变量声明一定放在作用域/函数最顶部(JavaScript只有函数作用域)。
举例:
// 变量声明被提前到作用域顶部,赋值保留在原地。 var a = ‘out‘; (function inside(){ alert(‘before: ‘ + a); //undefined var a = ‘in‘; alert(‘after: ‘ + a); //‘in‘ }()) alert(‘out: ‘ + a); // ‘out‘ //相当于 var a = ‘out‘; (function inside(){ var a; //声明提前 alert(‘before: ‘ + a); //a未被初始化,故为undefined a = ‘in‘; alert(‘after: ‘ + a); //a被赋值,为‘in‘ }()) alert(‘out: ‘ + a);
// 函数声明整个被提前 // 函数声明格式:function fun(){...} fun(); //‘Hello,world.‘ function fun(){ alert(‘Hello,world.‘); } fun(); //‘Hello,world.‘ //函数作为值整个赋给变量时,只是变量被提前,函数未被提前 fun(); //TypeError错误,指出fun不是一个函数 var fun = function(){ alert(‘Hello,world.‘); }; fun(); //‘Hello,world.‘ 相当于: var fun; fun(); //fun还未被初始化,所以它不是一个函数 fun = function(){ alert(‘Hello,world.‘); }; fun(); //‘Hello,world.‘
这个知识点具体细节大概就这么多,认真思考体会。
参考:
时间: 2024-10-11 11:37:39