美文网首页让前端飞程序员饥人谷技术博客
变量声明前置与函数声明前置

变量声明前置与函数声明前置

作者: _Dot912 | 来源:发表于2017-08-15 17:11 被阅读0次

变量声明前置

变量声明出现在代码中的任何位置都会在该代码执行前处理,这意味着变量可以在声明之前使用。这个行为叫"hoisting",即把在指定作用域内声明的变量提升到函数或全局代码的顶部。
声明变量的作用域限制在其声明位置的上下文中,而未声明变量总是全局的,所以总在作用域最开始声明变量可以使变量的作用域变得清晰。

示例:

console.log(a);  //undefined
var a=1;
console.log(b);  //ReferenceError:b is not defined
  • 由上到下执行代码之前,解析器会先找关键字var,找到了var a,就提升var a并将a初始化为undefined
  • 再由上往下执行,读到consolo.log(a),控制台打印出来的就是undefined
  • 接着给变量a赋值为1,如果这个时候后面再加一句consolo.log(a),那么控制台就会多打印出一个1
  • console.log(b)的结果很好理解,因为没有声明变量b所以抛出错误

也就是说变量声明会在代码执行之前就创建、初始化并赋值undefined

注意:
提升的是var a而不是var a=1,var a=1是后面赋的值。
这也印证了:变量声明会提升,变量的赋值不会提升!!!

函数声明前置

使用function关键字可以声明一个函数,它的特征是函数声明提升,执行代码前会先读取函数声明,即函数声明不必放在调用的前面,它可以放在当前作用域的任何位置。
示例:

a();
function a(){
console.log("hello world")
};

以上代码结果如下:没有return语句就会有undefined。

js引擎有以下过程:

  • 找到所有用function声明的变量,在环境中创建这些变量
  • 将这些变量初始化并赋值为function(){console.log("hello world")}
  • 开始执行代码a()

也就是说function声明会在代码执行之前就创建、初始化、赋值


注意:变量声明和函数声明都会提升,函数声明提升的优先级高于变量声明提升。
示例:

console.log(a);
var a=1;
function a(){};

推荐阅读
我用了两个月的时间才理解 let

相关文章

  • 变量声明前置与函数声明前置

    变量声明前置 变量声明出现在代码中的任何位置都会在该代码执行前处理,这意味着变量可以在声明之前使用。这个行为叫"h...

  • 变量声明前置与函数声明前置

    变量声明前置 变量声明出现在代码中的任何位置都会在该代码执行前处理,这意味着变量可以在声明之前使用,这个行为叫"h...

  • 声明前置

    变量的声明前置 用var创建变量,声明会前置 如果上面没用 var 声明变量,直接使用就是会报错 函数的声明前置 ...

  • 函数与作用域

    函数声明与函数表达式的区别 变量的声明前置与函数的声明前置 arguments 通过以下语句可将arguments...

  • 关于函数

    1. 函数声明和函数表达式有什么区别? 2. 什么是变量的声明前置?什么是函数的声明前置? 变量声明前置:所谓的变...

  • 用几个demo帮助理解JS作用域链和声明前置

    声明前置 变量的声明前置:指在变量被定义时,会在代码执行之前将变量放在最前面进行初始化。 函数的声明前置:会将函数...

  • 函数与作用域

    1.函数声明和函数表达式有什么区别 2.什么是变量的声明前置?什么是函数的声明前置 所谓的变量声明前置就是在一个作...

  • 2-3.函数与作用域

    1.函数声明和函数表达式有什么区别? 2.什么是变量的声明前置?什么是函数的声明前置? 就是var变量和funct...

  • JS -函数及其作用域

    1、函数声明和函数表达式有什么区别 2、什么是变量的声明前置?什么是函数的声明前置 3、arguments 是什么...

  • zj3 函数与作用域

    讲解函数声明、函数表达式、声明前置、作用域、作用域链相关概念 函数声明和函数表达式有什么区别 什么是变量的声明前置...

网友评论

    本文标题:变量声明前置与函数声明前置

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