【Javascript】函数提升和变量提升的理解

JavaScript的解释过程包括预解析和代码执行,其中变量提升仅提升声明,而函数提升会提升整个代码块。函数的优先级高于变量,同名函数和变量的声明会以前者为准。在函数内部,隐式全局变量不会被提升,报错。
摘要由CSDN通过智能技术生成

Javascript(以下简称JS)文件是通过浏览器的解释器来运行的,解释器的解释过程分为预解析代码执行。其中预解析中会进行变量声明和函数的提升

先说结论

  1. 提升优先级为函数优先级高于变量
  2. 变量提升只提升声明,函数提升会提升整个代码块
  3. 只有显示声明的变量会提升,只有function声明的函数会提升
  4. 首次提升时,同名变量或函数的声明会以前者为准,忽略后者

下面是例子

1.提升优先级为函数优先级高于变量
2. 变量提升只提升声明,函数提升会提升整个代码块
4. 提升时,同名变量或函数的声明会以前者为准,忽略后者

console.log(x);   //undefined
 var x = 1;
 function fn() {
    console.log(x);  // 函数本身    function x() { console.log(x)}
    var x = 2;
    function x() { console.log(x)}
    console.log(x);    // 2
    x();    //报错
 }
 fn();
// 解析
var x
 console.log(x);  // undefined  声明提前
 x = 1
 function fn() {
    function x() {console.log(x)}
    var x;
    console.log(x);  // 函数本身(名字相同,忽略后者var x)
    x = 2;
    console.log(x); // 2  这里进行了赋值操作 
    x();   // 报错; 这里没有函数了,只有变量x
 }
fn();
  1. 只有显示声明的变量会提升,只有function声明的函数会提升
function foo() {
  console.log(a);
  console.log(b); // 报错
  b = 'aaa';//隐式全局变量不提升,故报错
  var a = 'bbb';
  console.log(a);
  console.log(b);
  console.log(f);// undefined
  var f=function(){
  	console.log('b');
  }
}
foo();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值