资讯专栏INFORMATION COLUMN

javascript中的变量提升

Tony_Zby / 315人阅读

摘要:变量提升变量提升即将变量声明提升到它所在作用域的最开始的部分,即函数声明和变量声明总是被解释器隐式地提升到包含他们的作用域的最顶端。闲先声明一个变量名为的变量,同时赋值为。但是,上面的代码运行的结果是这就是我今天关注的东西变量提升。

变量提升

变量提升即将变量声明提升到它所在作用域的最开始的部分,即函数声明和变量声明总是被JavaScript解释器隐式地提升(hoist)到包含他们的作用域的最顶端。在ES6之前,JavaScript没有块级作用域(一对花括号{}即为一个块级作用域),只有全局作用域和函数作用域。

首先看一段简单的代码

var name = "Clam";
(function (){
    console.log(name);
})();

// Clam

上面的代码很简单。闲先声明一个变量名为name的变量,同时赋值为Clam。后面是一个立即执行函数,在函数体中控制台输出name。结果为Clam,没毛病~接着看下面的代码。

简单的修改一下上面的代码

var name = "Clam";
(function (){
    console.log(name);
    var name = "Klay";
})()

首先我们自己分析一下上面的代码哈:首先声明了一个变量name并且赋值为Clam,紧接着也是一个立即执行函数,在函数体中首先控制台输出了name,但是之后,又声明了赋值了一次变量name
那我来猜想一下,恩,控制台输出了Clam,但是在立即执行函数结束之后,变量name的值被修改成了Klay
但是,上面的代码运行的结果是:

undifined
// exm??

这就是我今天关注的东西:变量提升

前面说过,变量提升会将变量的声明提升到其作用域的最前端。这里,name所在的作用域就是指这个函数作用域,上面的代码就相当于以下代码。

var name = "Clam";
(function (){
    var name;
    console.log(name); //undefined
    name = "Klay";
})()
函数提升

js中创建函数有两种方式:函数声明式和函数字面量式。只有函数声明才存在函数提升。

console.log(f1); // function f1() {}   
console.log(f2); // undefined  
function f1() {}
var f2 = function() {}

以上,enjoy

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/89202.html

相关文章

  • Javascript中的变量提升、函数提升变量访问原则

    摘要:变量提升什么是变量提升在函数体内声明的变量,无论你是在函数的最底端还是中间声明的,那么都会把该变量的声明提升到函数的最顶端相当于第一行,但是只是提升变量的声明,不会赋值。 1、变量提升 什么是变量提升?在函数体内声明的变量,无论你是在函数的最底端还是中间声明的,那么都会把该变量的声明提升到函数的最顶端(相当于第一行),但是只是提升变量的声明,不会赋值。 var num = 10; fu...

    zhigoo 评论0 收藏0
  • 浅析JavaScript中的提升

    摘要:代码在执行时并不完全是由上到下一行一行执行的,由此产生了一个提升的问题。第二个赋值声明会被留在原地等待执行阶段。可以得知函数声明提升的优先权大于普通变量声明。 JavaScript代码在执行时并不完全是由上到下一行一行执行的,由此产生了一个提升的问题。 什么是提升 可以简单理解为:声明(变量和函数)都会被移动到各自作用域的最顶端,这个过程被称为提升。 具体例子看提升 下面两个例子a会l...

    everfly 评论0 收藏0
  • JavaScript中的变量提升、作用域

    摘要:即的变量提升此处变量未声明时便可以使用,其实是因为会自动将声明语句提升到顶部。但名字的初始化却是按其在代码中书写的顺序进行的,不受以上优先级的影响。 变量提升(hoisting) 在JavaScript中,函数、变量的声明都会被提升(hoisting)到该函数或变量所在的scope的顶部。即——JavaScript的变量提升. var x = 5; alert(x); ...

    wwq0327 评论0 收藏0
  • 关于javascript中的作用域和作用域链

    摘要:作用域的类别可以影响到变量的取值,分为词法作用域静态作用域和动态作用域。而,采用的就是词法作用域,或者叫静态作用域。 关于javascript中的作用域和作用域链 我GitHub上的菜鸟仓库地址: 点击跳转查看其他相关文章 文章在我的博客上的地址: 点击跳转         前面的文章说到, 执行上下文的创建阶段,主要有三个内容:         1、创建变量对象;2、初始化作用域...

    lcodecorex 评论0 收藏0
  • ES6 变量作用域与提升变量的生命周期详解

    摘要:不同的是函数体并不会再被提升至函数作用域头部,而仅会被提升到块级作用域头部避免全局变量在计算机编程中,全局变量指的是在所有作用域中都能访问的变量。 ES6 变量作用域与提升:变量的生命周期详解从属于笔者的现代 JavaScript 开发:语法基础与实践技巧系列文章。本文详细讨论了 JavaScript 中作用域、执行上下文、不同作用域下变量提升与函数提升的表现、顶层对象以及如何避免创建...

    lmxdawn 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<