美文网首页
变量提升问题

变量提升问题

作者: 迪爷 | 来源:发表于2016-12-25 21:05 被阅读0次
     var f = function(){
       console.log(scope); //undefined,只提升了变量的声明
       var scope = 'f';
       console.log('sss',scope);//此时结果是'f'
     }
     f(); 

   
     

这是 变量提升问题

1. 变量提升,

很简单,就是把变量提升提到函数的top的地方。我们需要说明的是,变量提升 只是提升变量的声明,并不会把赋值也提升上来。
比如:我们定义三个变量:
  (function(){ 
        var a='One'; 
        var b='Two';
        var c='Three';})()    
实际上它是这样子的:
  (function(){
    var a,b,c;
    a='One';
    b='Two';
    c='Three';
})()
这个时候就把变量提升了呀。
好,我们现在回到第一段code里面。为什么会undefined呢?其实,根据上面变量提升以及js的作用域(块级作用域)的分析,得知 上面代码真正变成如下:
var v='Hello World';
(function(){
    var v;
    alert(v);
    v='I love you';
})()
所以,才会提示说“undefined”。
从这里,我们也学习到,我们在写js code 的时候,我们需要把变量放在函数级作用域的顶端,比如我在上面所举的例子:var a,b,c;。以防止出现意外。

2. 函数提升

函数提升是把整个函数都提到前面去。
在我们写js code 的时候,我们有2种写法,一种是函数表达式,另外一种是函数声明方式。我们需要重点注意的是,只有函数声明才能被提升。

函数声明方式提升【成功】

function myTest(){
    foo();
    function foo(){
        alert("我来自 foo");
    }
}
myTest();

函数表达式方式提升【失败】

function myTest(){
    foo();// 报错
    console.log('foo output',foo);// 这个代表了变量声明提升,undefined
    var foo =function foo(){
        alert("我来自 foo");
    }
}
myTest();
function.png

相关文章

  • 4.ECMAScript6(ES6)- let和const的特征

    变量提升问题不允许重复声明块级作用域 1、变量提升问题 (1)变量在提升之前就可以使用 (2)变量在提升之前不可以...

  • 变量提升问题

    这是 变量提升问题 1. 变量提升, 很简单,就是把变量提升提到函数的top的地方。我们需要说明的是,变量提升 只...

  • 作用域 和 闭包

    变量提升带来的问题 1. 后面定义的变量 会覆盖 前面的同名变量 因为变量提升, 后定义的变量 会在不...

  • javascript中的变量提升

    javascript(以下称js)中的变量提升是我们经常会遇到的问题。 变量提升,顾名思义就是将后面的变量提升至作...

  • 变量提升

    块级作用域 没有变量提升,在块级作用域外引用变量会报错,报引用错误。 变量提升问题 很多人不知道变量提升是什么,举...

  • ES6定义变量

    一、let命令 不存在变量提升。es5的var会存在变量提升问题,但是es6的let和const不会存在变量提升问...

  • 变量声明提升

    变量声明提升是JS中一个基础的问题,同时也是对JS词法作用域认识的一个提升。在JS面试题中,关于变量声明提升的问题...

  • 变量提升的问题hoisting

    变量提升的问题hoisting 1.先看一段代码 var a="you bad bad"; alert(v); 可...

  • 关于变量提升的问题

    此段代码输出的分别是undefined 和2 虽然在外面声明了一个foo,但是在函数里也同样声明了一个foo变量。...

  • 变量提升和函数提升的问题

    关于变量提升,大家可能都听的耳朵都起茧了。但是最近的一次讨论 ,又让我有了新的认识。 先看看题:请说出1,2对应序...

网友评论

      本文标题:变量提升问题

      本文链接:https://www.haomeiwen.com/subject/hwsdvttx.html