JS作用域与声名提升

JS的作用域一共有三个范围,分别是:

  1. 全局作用域
    定义在所有函数之外的变量,其作用范围是在整个脚本中
  2. 局部作用域(函数作用域)
    使用var定义在函数内部的变量,其作用范围是整个函数结构,超出函数 {} 花括号的范围则不能使用。
  3. 块级作用域
    ES6声明变量的方式:let / const
    let 变量名 = 变量值;
    const 变量名 = 变量值;
    PS:注意: 使用const修饰的变量,赋值确定后,不允许再重新赋值。(一般修饰常量或者数组对象之类的)
    而且必须给予初始值。
    const修饰数组对象后虽然不可以再对变量进行等号赋值了,但是还是可以用数组和对象的方法去改变它的内部结构。
    IIFE(立即调用函数表达式 - - 自执行匿名函数):
    英文全名:(Immediately Invoked Function Expression)
    语法:
//这三种都属于IIFE写法
(function () {})();
(function () {}());
+function () {}();
//作用与ES6当中的let是一样的,只不过用这个语法是为了解决个别浏览器的兼容问题。

声名提升:

将使用var定义的变量声名提升到对应作用域的最顶部,赋值部分位置不变。

使用ES6的let与const没有声名提升。

函数的定义也存在声名提升:

  • 如果是声名的方式定义的函数,将整个函数(声名及函数主体)都提升到作用域的最顶部。
  • 如果是表达式的方式定义的函数,只提升声名,不提升赋值(函数主体部分)

示例:

//在声名函数前面输出它。输出的结果就是整个声名函数的内容
console.log(testArg)
function testArg(a, b, c){
	console.log(arguments)
}

输出结果:
在这里插入图片描述

//在函数表达式之前输出函数
console.log(testArg)
var testArg = function(a, b, c) {
	console.log(arguments)
}

输出结果:
在这里插入图片描述
这就是声名提升的特点,只提升声名部分,不提升赋值部分。大家一定要牢牢记住哦~

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值