脚本宝典收集整理的这篇文章主要介绍了javascript变量提升和函数提升,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
变量提升
VARiable hoisting变量提升是js比较有特点的地方,它允许你先使用变量,在其后面再进行变量声明,不会抛出 Uncaught ReferenceError异常。虽然变量被提升到前面,但是它的默认值则是undefind,在引用的时候也使用这个值,知道在其面后进行赋值,在使用时候即为所赎的值。
举个例子:
@H_304_8@
console.LOG(x)
//如果后面不定义x 则抛出"ReferenceError: x is not defined
//如果后面对x定义 则打印出undefined
var x = 2
var abc = "abcd";
(function(){
console.log(abc); //undefined
var abc = "1234";
console.log(abc); //"1234"
})()
//上面代码可以这样翻译
var x;
console.log(x)//undefined
var x = 2
var abc = "abcd";
(function(){
var abc;
console.log(abc); //undefined
var abc = "1234";
console.log(abc); //"1234"
})()
基于这个原因,在平时编写代码时候,尽量把变量声明放到代码块最顶层位置,可以使代码结构清晰。
注意的是,在ES6语法中新增的let or const 声明方式,并不支持这种变量提升,强行使用会抛出错误ReferenceError
对于函数提升,只用函数的声明被提升,表达式则不会被提升
/* 函数声明 */
foo(); // "bar"
function foo() {
console.log("bar");
}
/* 函数表达式 表达式定义的函数,称为匿名函数。匿名函数没有函数提升。*/
baz(); // TyPEError: baz is not a function
//此时的"baz"相当于一个声明的变量,类型为undefined。
由于baz只是相当于一个变量,因此浏览器认为"baz()"不是一个函数。
var baz = function() {
console.log("bar2");
};
以上是脚本宝典为你收集整理的javascript变量提升和函数提升全部内容,希望文章能够帮你解决javascript变量提升和函数提升所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。