变量 和函数声明提前问题
2016-08-08 15:39
232 查看
经验总结:
1、变量的声明被提前到作用域顶部,赋值保留在原地;
2、函数声明整个被提前;
3、函数作为值整个赋给变量时,只有变量“被提前”了,函数没有“被提前”。
作为最佳实践:
变量声明一定放在作用域/函数最顶部(JavaScript只有函数作用域)。
举例:
这个知识点具体细节大概就这么多,认真思考体会。
参考:
知乎话题
博客1
一些官方说明文档
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.'
这个知识点具体细节大概就这么多,认真思考体会。
参考:
知乎话题
博客1
一些官方说明文档
相关文章推荐
- (转)JavaScript 中对变量和函数声明的“提前(hoist)”
- javascript 直接创建对象与间接创建对象 私有函数不能访问this变量 是否使用var声明变量几个问题探讨
- JavaScript 中对变量和函数声明的“提前(hoist)”
- js中变量的函数作用域和声明提前
- JavaScript 中对变量和函数声明的“提前(hoist)”
- 变量声明提前和函数声明提前
- JavaScript 中对变量和函数声明的“提前(hoist)”
- JavaScript中对变量和函数声明的提前
- JavaScript 中对变量和函数声明的“提前(hoist)”
- JavaScript 中对变量和函数声明的“提前(hoist)”
- javscript函数内变量声明提前
- JavaScript 中对变量和函数声明的“提前(hoist)”
- JavaScript 中对变量和函数声明的“提前(hoist)”
- Javascript编程笔记一:理解变量和函数提前声明
- Js中有关变量声明和函数声明提升的问题
- JavaScript 中对变量和函数声明的“提前(hoist)”
- JavaScript中提前声明变量或函数例子
- JavaScript 中对变量和函数声明提前的示例
- JavaScript 中对变量和函数声明的“提前(hoist)”
- JavaScript 中对变量和函数声明的“提前”