美文网首页
有关Js作用域声明提升

有关Js作用域声明提升

作者: KittyKnight | 来源:发表于2017-04-30 20:23 被阅读14次

js抛不开的话题就是这个变量提升了,看了YDKJS关于这个的章节,总结几点。

1.声明提升,赋值不提升,这其实表象来看的结果,其实质如下

alert(foo);

var foo = 1;

比如这两行,结果是undefined,并不是1,就是因为编译器把var foo = 1拆成了两句话,一句var foo,一句foo = 1;

结果变成了

var foo;

alert(foo);

foo = 1;

2.函数提升 > 变量提升

alert(foo());

function foo(){

    return 1;

}

var foo = function(){

   return 1;

}

按照第一条的理论,还有惯性思维的判断,后声明后后提升,这个看起来应该是undefined,结果其实是1.

3.后声明,后提升

alert(foo());

if(true){

    function foo(){ return 1;}

} else {

    function foo(){return 2;}

}

这个大家都觉得应该是1吧,其实不是,我们能得出这个结论,是因为我们在看代码是使用的执行视角,但是代码在运行之前要用编译器的视角来完成运行路线,所以在上面那段代码中,编译器会看到两段声明,第二段,覆盖了第一段。

这就是神奇的js语言。

相关文章

  • 有关Js作用域声明提升

    js抛不开的话题就是这个变量提升了,看了YDKJS关于这个的章节,总结几点。 1.声明提升,赋值不提升,这其实表象...

  • JS 提升

    变量提升即将变量声明提升到它所在作用域的最开始的部分 在 js 中只有两种作用域,全局作用域和函数作用域,在ES6...

  • 变量声明提升

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

  • JS的声明提升、this、作用域

    声明提升 大部分编程语言都需要先声明变量再使用,JS可以先使用再声明,JS可以正常输出undefined, 而不是...

  • JavaScript 函数声明与函数表达式的区别

    函数声明 存在函数提升(同比于变量提升) 函数声明在JS解析时进行函数提升,因此在同一个作用域内,不管函数声明在哪...

  • 深入理解ES6(2)

    第1章 块级作用域绑定 1. var声明及变量提升(Hoisting)机制 基于js原生是没有块级作用域的,看下面...

  • es6块级作用域定义声明函数

    允许在块级作用域内声明函数。函数声明类似于var,即会提升到全局作用域或函数作用域的头部。同时,函数声明还会提升到...

  • js 的变量提升和函数提升

    1. 深入理解 js 的变量提升和函数提升 先了解:js没有块级作用域,只有全局作用域,和函数作用域 相同的函数名...

  • 2018-12-18

    JS高级 作用域&作用域链 作用域: 1.作用域的个数:n(函数声明的个数)+1(全局作用域)2.作用域不会存储变...

  • let和var的区别

    var 和 let 都是用于变量声明的关键字 作用域var 是函数级作用域,let是块级作用域 变量提升问题 声明...

网友评论

      本文标题:有关Js作用域声明提升

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