首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript提升概念

Javascript提升概念
EN

Stack Overflow用户
提问于 2018-02-15 15:49:34
回答 4查看 88关注 0票数 0

以下两个规范在吊装方面有什么不同?

代码语言:javascript
复制
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();

EN

回答 4

Stack Overflow用户

发布于 2018-02-15 16:03:25

案例1:

代码语言:javascript
复制
function hoist() {
  console.log(message);//undefined
  var message='Hoisting is all the rage!'
}

hoist();

等于:

代码语言:javascript
复制
function hoist() {
  var message;//undefined
  console.log(message);
  message='Hoisting is all the rage!'
}

hoist();

所以,你得到了未定义;

在代码执行之前,var提升发生在

case2:

代码语言:javascript
复制
function hoist() { 
    console.log(message);//error,because message is not defined.
    message='Hoisting is all the rage!'
}

hoist(); 

如果您删除控制台,在代码执行之后执行,结果如下所示

代码语言:javascript
复制
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是在没有声明的情况下分配的,将是一个全局变量。

当代码正在运行并且在没有声明的情况下遇到赋值时,就会发生。

票数 1
EN

Stack Overflow用户

发布于 2018-02-15 16:02:38

这个问题包含提升和范围两个方面。

提升意味着函数和变量定义在当前作用域的顶部,位于函数的第1行。

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

票数 0
EN

Stack Overflow用户

发布于 2018-02-15 16:04:13

结果应该是:

代码语言:javascript
复制
undefined

undefined

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48802268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档