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

变量声明前置

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

示例:
console.log(a);   // undefined
var a  = 1;
console.log(b);  //Referencerror: b is not deined
  • 由上到下执行代码之前,解析器会先找到var关键字,找到了var a ,就提升var a 并将a初始化为undefined
  • 再由上往下执行,读到console.log(a),控制台打印出来的就是undefined。
  • 接着给变量a赋值,如果这个时候在后面加console.log(a),那么控制台打印出来的就是1.
  • console.log(b),在前面没有对b进行声明,所以报错。
    变量会在代码执行之前就创建,初始化并赋值undefined
    变量的声明会提升,变量的赋值不会提升

函数声明前置

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

a();
function a(){
  console.log(''hello'')
}

以上代码没有return,返回值undefined

a();
function a(){
  return(''hello'')
}

以上代码返回值''hello''

JS引擎的过程

  • 扎到所有用function声明的函数,在环境中创建这些函数
  • 将这些函数初始化并赋值为function(){}
  • 开始执行代码a()
    函数提升的优先级高于变量提升的优先级

你可能感兴趣的:(变量声明前置与函数声明前置)