ES5只有全局作用域和函数作用域,没有块级作用域。 此处输出undefined,是因为变量提升,内层的temp替换覆盖了外层的temp变量。 变量提升:var 命令会发生“变量提升”现象,即变量可以在声明之前使用,即undefined,为了纠正这种现象,let命令改变了语法行为,它所声明的变量一定要 ...
分类:
其他好文 时间:
2018-01-18 13:29:43
阅读次数:
142
JaveScript 是Web前端开发的最重要的语言,在JavaScript中作用域是一个重要的基础知识点。 在JavaScript中共有三种作用域,分别是全局作用域、函数左右域和块级作用域。本文会先对三种作用域做介绍,之后举一个常见的例子做整体介绍。 ...
分类:
编程语言 时间:
2018-01-17 00:25:01
阅读次数:
178
前言:ECMAScript和JavaScript是什么关系? JavaScript由ECMAScript,BOM,DOM组成,前者是后者的规范,后者是前者的实现 1.let和const命令 1)let用于声明变量,声明的变量是块级作用域 2)var声明的变量有变量提升的现象,let声明的变量没有 3 ...
分类:
其他好文 时间:
2018-01-12 18:34:48
阅读次数:
155
一、立即执行函数 IIFE 立即执行函数的集中表现形式: 立即执行函数的特点: 二、JS 全局污染 为什么会造成全局污染? JS 没有块级作用域,在函数外定义的变量,均为全局变量; 全局变量过多会削弱程序的灵活性,增大了模块之间的耦合度,多人协作开发会导致变量冲突,造成环境污染。 耦合度:即模块之间 ...
分类:
Web程序 时间:
2018-01-11 16:09:50
阅读次数:
348
一:Let (1)Let定义块级作用域的变量,var定义的变量会提升。Let不会提升。如下。可以先用是undefined但是let在定义之前是不能用的。会报错Uncaught ReferenceError: letter is not defined(…) console.log(color) co ...
分类:
其他好文 时间:
2018-01-04 18:03:39
阅读次数:
222
1、let所声明的变量只在let命令所在的代码块有效 2、不存在变量提升 在代码块内,使用let命令声明变量之前,该变量都是不可用的,称为暂时性死区。 3、不允许重复声明 let 不允许在相同作用域内重复声明一个变量 4、块级作用域 没有块级作用域的不合理的场景 因为变量提升,导致内层的tmp变量覆 ...
分类:
其他好文 时间:
2018-01-03 00:50:59
阅读次数:
295
ES6 针对新的语法特性(解构、参数默认值、箭头语句、块级作用域let),对于函数的属性、参数、作用域进行了扩展,并对递归调导致内存栈溢出用进行了优化。 同时ES6规定,只要函数参数使用了默认值、解构赋值、扩展运算符,函数内部都不可以使用严格模式(ES5可以),否则会报错; 1. 函数参数默认值 E ...
分类:
其他好文 时间:
2017-12-24 11:19:57
阅读次数:
201
以前无论声明变量还是常量,总是使用var一勺端,知道接触了es6之后,发现原来变量、常量的声明其实是很讲究的。 这里简单来谈谈var、const与let。 1、var。var声明的变量没有块级作用域,而且存在变量名提升的情况。这里举例说明。 为什么第一个输出值会是undefined,而不是123呢? ...
分类:
其他好文 时间:
2017-12-17 23:59:06
阅读次数:
279
在一些类似C语言的编程语言中,花括号内的每一段代码都具有各自的作用域,而且变量在声明它们的代码段之外是不可见的,我们称为块级作用域(block scope),而JavaScript中没有块级作用域。JavaScript取而代之地使用了函数作用域(function scope):变量在声明它们的函数体 ...
分类:
编程语言 时间:
2017-12-13 23:18:50
阅读次数:
126
作用域 域,表示的是一个范围,作用域,就是作用范围。 作用域说明的是一个变量可以在什么地方被使用,什么地方不能被使用。 块级作用域 上面这段代码在JavaScript中是不会报错的,但是在其他的编程语言中(C#、C、JAVA)会报错。 这是因为,在JavaScript中没有块级作用域,使用{}标记出 ...
分类:
Web程序 时间:
2017-12-11 11:18:25
阅读次数:
118