tangyuxian
文章69
标签34
分类5
js-关于变量与函数解析规则总结

js-关于变量与函数解析规则总结

通过变量和函数重名这一情况理解和分析二者的解析规则

一 解析规则

  1. 函数声明会置顶
  2. 变量声明会置顶
  3. 函数声明优先级高于变量声明,重名时函数是一等公民
  4. 变量和赋值语句一起书写,在js引擎解析时,会将其拆成声明和赋值两个部分,声明置顶,赋值保留在原来位置(参考: 菜鸟教程:JavaScript 声明提升)
  5. 声明过的变量不会重复声明

二 根据解析规则测试几种情况

1 函数和变量重名下执行情况

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

//结果:1

函数和变量都会提升,但函数优先于变量,再次声明变量foo,因已存在不会重复声明,最上面的函数执行输出1,在重新赋值后,再次执行将输出2

2 立即执行函数情况

var a = 5;
var b = 10;
(function b(){
    b = 20;
    console.log(a);
    console.log(b); 
})();
//结果:5 funciton b

立即执行的函数名不允许修改,被认为是匿名自执行函数,非严格模式静默修改失败,严格模式("use strict")抛出"Uncaught TypeError: Assignment to constant variable."错误

参照 MDN:IIFE(立即调用函数表达式)

本文作者:tangyuxian
本文链接:https://www.tangyuxian.com/2022/05/05/%E5%89%8D%E7%AB%AF/JavaScript/js-%E5%85%B3%E4%BA%8E%E5%8F%98%E9%87%8F%E4%B8%8E%E5%87%BD%E6%95%B0%E8%A7%A3%E6%9E%90%E8%A7%84%E5%88%99%E6%80%BB%E7%BB%93/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可