以下两个规范在吊装方面有什么不同?
function hoist1() {
console.log("Hello1 ",message);
message='Hoisting is all the rage!'
}
hoist1();
function hoist2() {
console.log("World ",message);
var message='Hoisting is all the rage!'
}
hoist2();
发布于 2018-02-15 16:03:25
案例1:
function hoist() {
console.log(message);//undefined
var message='Hoisting is all the rage!'
}
hoist();等于:
function hoist() {
var message;//undefined
console.log(message);
message='Hoisting is all the rage!'
}
hoist();所以,你得到了未定义;
在代码执行之前,var提升发生在
case2:
function hoist() {
console.log(message);//error,because message is not defined.
message='Hoisting is all the rage!'
}
hoist(); 如果您删除控制台,在代码执行之后执行,结果如下所示
var message;
function hoist() {
//console.log(message);
message='Hoisting is all the rage!'
}
hoist();
console.log(message);//Hoisting is all the rage!因此,您可以在hoist之外访问message。
这里的message是在没有声明的情况下分配的,将是一个全局变量。
当代码正在运行并且在没有声明的情况下遇到赋值时,就会发生。
发布于 2018-02-15 16:02:38
这个问题包含提升和范围两个方面。
提升意味着函数和变量定义在当前作用域的顶部,位于函数的第1行。
如果定义变量时不使用var关键字,JavaScript会查看当前范围和父范围(在函数外部),以查看是否已定义该变量。如果使用严格模式,在发现它没有定义之后,它将失败。如果不是严格模式,它将被定义为全局变量。使用严格模式!这通常是一种不受欢迎的行为。
发布于 2018-02-15 16:04:13
结果应该是:
undefined
undefined提升会将声明移到顶部,因此第二个函数将成为已执行的函数,或hoist。然而,var不允许提升值,只允许提升变量,例如var x = 5将在顶部声明x,但随后设置X。因此,消息的评估是undefined。
https://stackoverflow.com/questions/48802268
复制相似问题