美文网首页
变量提升和函数提升

变量提升和函数提升

作者: 静候那一米阳光 | 来源:发表于2018-05-31 20:33 被阅读0次

摘自《你不知道的JavaScript上卷》KYLE SIMPSON著

变量提升

引擎会在解释 JavaScript 代码之前首先对其进行编译。编译阶段中的一部分工作就是找到所有的声明,并用合适的作用域将它们关联起来。

所以,包括变量核函数在内的所有声明都会在任何代码被执行前首先被处理。

var a = 2;

JavaScript 实际上会将其看成两个声明:var a;a = 2;。第一个定义声明是在编译阶段进行的,第二个赋值声明会被留在原地等待执行阶段。

函数提升

函数声明会被提升,但是函数表达式却不会被提升。

foo();
bar();

var foo = function bar(){
    //...
}

会被理解为:

var foo;
foo();
bar();
foo = function() {
    var bar = ...self...
    //...
}

函数优先

函数会被优先提升,然后才是变量。

【1】

foo(); //1
var foo;
function foo(){
    console.log(1);
}

foo = function(){
    console.log(2);
}

【2】

var a=1;function a(){} //1
var a;function a(){} //f a(){}

【3】

foo();//3
function foo(){
    console.log(1);
}
var foo = function(){
    console.log(2);
}
function foo(){
    console.log(3);
}

【4】

foo(); //'b'  根据书上写的。一个普通块内部的函数声明通常会被提升到所在作用域的顶部。   chrome的结果是foo is not a function
var a = true;
if(a){
    function foo(){console.log('a');}
}else{
    function foo(){console.log('b');}
}

相关文章

  • JS中的提升

    JS中包含两种提升,变量提升和函数提升。 变量提升 变量提升只能是var或者function声明的变量或者函数,l...

  • 引用类型

    变量提升和函数声明提升   函数声明提升就是把函数声明提升到函数声明所在作用域中(或者说一个函数体内)的顶端,变量...

  • 2021-04-02

    变量提升和函数提升以及他们的优先级 1,变量提升:变量提升是指将变量声明提升到它所在的作用域的最开始部分 2,函数...

  • 关于变量提升

    函数提升的优先级要高于变量提升,变量提升到函数声明的后面; 变量提升,但是赋值不提升,函数表达式不提升;

  • let const var

    变量提升 函数会优先于变量提升; 函数提升会把整个函数移到作用域顶部 变量提升智慧把变量的定义移到作用域顶部 wi...

  • 变量提升

    变量提升 Hoisting 变量和函数的声明会在编译时被提升到作用域的顶部 提升的是声明,函数会连带函数体提升 i...

  • 变量提升和函数提升

    摘自《你不知道的JavaScript上卷》KYLE SIMPSON著 变量提升 引擎会在解释 JavaScript...

  • 变量提升和函数提升

    1.变量提升 console.log(a);//undefined var a=123; 因为变量a的声明被提到了...

  • 变量提升和函数提升

    在javascript里存在一种叫变量声明提升的东西。这里来详细的说一说,到底什么样的声明会提升,提升了什么东西。...

  • 变量提升和函数提升

    JS不像C语言,C语言是先声明后使用,否则会报错。但JS中,有变量提升现象,可以先使用后声明。 JS存在变量提升,...

网友评论

      本文标题:变量提升和函数提升

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