资讯专栏INFORMATION COLUMN

变量提升

happyhuangjinjin / 1377人阅读

摘要:变量提升的变量提升往往是由内部变量和全局变量命名相同引起的。例二先打印出,然后打印本例中没有,这是中的隐式全局变量,可以通过和进行访问。因为在函数内部,所以相当于在函数内部也定义了一个内部变量。

变量提升:javascript的变量提升往往是由内部变量和全局变量命名相同引起的。

例一:

 var v="Hello JS";
 (function(){
 alert(v);
 var v="I love JS";
 })()

alert出来的是undefined,因为在函数内部定义一个和外部变量名称相同的变量时,变量的声明会提升至第一句,赋值则不会变,所以上述语句其实是这样执行的:

var v="Hello JS";
(function(){
var v;
alert(v);
v="I love JS";
})()

本例先定义的是全局变量V,在函数里面又定义了内部变量V,alert(v)执行的时候,实际是先在函数内创建变量v,然后执行。

例二:

(function(){
a = 10;       
alert(window.a);   
var a = 5;
alert(a);          
})();

先打印出undefined,然后打印5
本例中a=10,没有var,这是js中的隐式全局变量,可以通过this 和 window进行访问。因为在函数内部,所以相当于在函数内部也定义了一个内部变量var a=10。内部变量和全局变量重名,内部变量把全局变量覆盖,这样内部变量值是10,外部变量变成undefined,这样通过window去访问,便是undefined。
例二中的执行顺序相当于:

var a = undefined;
(function(){
var a ;
a = 10 ;
alert(window.a);
a = 5;
alert(a);
})();

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

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

相关文章

  • JS中的变量提升和函数提升

    摘要:什么是函数作用域下的变量提升和函数提升函数作用域中也存在变量提升和函数提升,这个和全局作用域下的情况是一模一样的,就是把作用域想成是全局的就可以了。 在js中有一部分比较难以理解,却也是在笔试过程中很容易考的,那就是变量提升和函数提升的问题,这篇文章我会就变量提升和函数提升的问题拓展一下有关js函数的知识点,包括作用域的问题,后面还会有一些小练习来判断自己是否真的搞懂了。 作用域 在j...

    zhunjiee 评论0 收藏0
  • js变量提升与函数提升的机制

    摘要:所谓变量提升,提升就是为了事先声明变量。变量提升之后,但其赋值还是留在原本的位置等运行到了之后动态赋值,而函数提升之后直接相当于在代码里抽空了。搞明白这个例子也就搞懂了作用域中变量和函数是怎么提升的。 问题 showImg(https://segmentfault.com/img/bVJ614?w=222&h=165); 在这个例子中它应该输出什么?输出的结果是6。 showImg(h...

    fasss 评论0 收藏0
  • 变量和函数声明提升

    摘要:声明提升变量和函数声明提升发生在预编译阶段。上面代码,函数内相当于对全局变量进行赋值函数声明提升创建函数有两种方式,函数声明和函数表达式,只有函数声明存在提升。同时声明变量和函数显示的是,初步证明的优先级高于。 声明提升 变量和函数声明提升发生在JavaScript预编译阶段。 所谓的声明提升,就是说变量或者函数在声明的时候会被提前到当前作用域的顶部,已经处于可访问状态。 变量声明提升...

    FleyX 评论0 收藏0
  • Javascript中的变量提升、函数提升变量访问原则

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

    zhigoo 评论0 收藏0
  • javascript声明提升

    摘要:但是碰到声明提升,这种想法就会被打破。声明一个函数进行相应的操作,会得到函数声明提升的结果。由此可以发现变量和函数的声明都会被提升在其他代码的前面执行。一个普通块内部的函数声明通常会被提升到所在的作用域的顶部。的创建初始化和赋值均会被提升。 Javascript声明提升 在分析声明提升之前,我认为有必要知道的两点: 一、引擎查询变量的两种方式 引擎查询变量的方式可以分为LHS和RHS两...

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

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

    lmxdawn 评论0 收藏0

发表评论

0条评论

happyhuangjinjin

|高级讲师

TA的文章

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