Javascript卷扬概念

时间:2018-02-15 07:49:34

标签: javascript hoisting

以下两个代码在吊装方面有何区别。

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();

4 个答案:

答案 0 :(得分:1)

案例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 hoisting发生

情况2:

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!

因此,您可以访问message中的hoist

message此处未经声明分配将是全局变量

当代码运行并且在没有声明的情况下遇到分配时,它会发生

答案 1 :(得分:0)

此问题包含提升和范围。

提升意味着函数和变量在当前范围的顶部定义,在第1行为您的函数定义。

如果在没有var关键字的情况下定义变量,JavaScript会查看当前和父作用域(在函数外部)以查看它是否已定义。如果使用严格模式,它会在发现它未定义后失败。如果不是严格模式,则将其定义为全局变量。使用严格模式!这通常是一种不受欢迎的行为。

答案 2 :(得分:0)

结果应为:

undefined

undefined

提升会将声明移到顶部,因此第二个函数将成为执行的函数,或hoist。但是var不允许提升值,只允许提升变量,例如var x = 5将声明x在顶部但在之后设置X.因此,对邮件的评估为undefined

答案 3 :(得分:-1)

在第一个例子中:

 message='Hoisting is all the rage!'

将修改(或创建,如果它不存在)全局message对象的window属性。

在第二个示例中,您只是设置一个未使用的本地。