JS作用域与声名提升

2019-8-12    seo达人

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



全局作用域

定义在所有函数之外的变量,其作用范围是在整个脚本中

局部作用域(函数作用域)

使用var定义在函数内部的变量,其作用范围是整个函数结构,超出函数 {} 花括号的范围则不能使用。

块级作用域

ES6声明变量的方式:let / const

let 变量名 = 变量值;

const 变量名 = 变量值;

PS:注意: 使用const修饰的变量,赋值确定后,不允许再重新赋值。(一般修饰常量或者数组对象之类的)

而且必须给予初始值。

const修饰数组对象后虽然不可以再对变量进行等号赋值了,但是还是可以用数组和对象的方法去改变它的内部结构。

IIFE(立即调用函数表达式 - - 自执行匿名函数):

英文全名:(Immediately Invoked Function Expression)

语法:

//这三种都属于IIFE写法

(function () {})();

(function () {}());

+function () {}();

//作用与ES6当中的let是一样的,只不过用这个语法是为了解决个别浏览器的兼容问题。

1

2

3

4

5

声名提升:

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



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



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



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

如果是表达式的方式定义的函数,只提升声名,不提升赋值(函数主体部分)

示例:



//在声名函数前面输出它。输出的结果就是整个声名函数的内容

console.log(testArg)

function testArg(a, b, c){

console.log(arguments)

}

1

2

3

4

5

输出结果:





//在函数表达式之前输出函数

console.log(testArg)

var testArg = function(a, b, c) {

console.log(arguments)

}

1

2

3

4

5

输出结果:



这就是声名提升的特点,只提升声名部分,不提升赋值部分。大家一定要牢牢记住哦~

————————————————

蓝蓝设计www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计  cs界面设计  ipad界面设计  包装设计  图标定制  用户体验 、交互设计、 网站建设 平面设计服务

日历

链接

个人资料

蓝蓝设计的小编 http://www.lanlanwork.com

存档