一.let,const和let的区别?
1.var定义的变量,没有块的概念,可以跨块访问, 不能跨函数访问。
2.let定义的变量,只能在块作用域里访问,不能跨块访问,也不能跨函数访问。
3.const用来定义常量,使用时必须初始化(即必须赋值),只能在块作用域里访问,而且
不能修改
二.严格模式('use strict')
1)'use strict'是JavaScript的严格模式
2)判断浏览器是否支持严格模式:
var hasStrictMode=(function(){“usestrict”;return this===unsefined;}());
3)在严格模式中禁止使用with语句
4)在严格模式中,所有变量要先声明,否则catch从句参数或全局对象的书zing赋值,
将会throw一个引用错误(在非严格模式下,这种隐式声明的全局变量的方法是给全局
对象添加一个新属性)
5)在严格模式中,调用的函数(不是方法)中的一个this值是undefined.(在非严格模
式下,调用函数中的this值总是全局对象)。可以利用这种特性来判断js实现是否支持严
格模式。
6)同样,在严格模式中,当通关过call()或apply()来调用函数时,其中的this值就是
call()或apply()传入的第一个参数(在非严格模式下,Null和undefined值被全局对象和
转换为对象的非对象值所代替)
7)在严格模式下,给只读属性赋值和给不可扩展的对象创建新成员都将抛出一个类型
错误异常(在非严格模式下,这些操作只是简单的操作失败,不会抛错)
8)在严格模式下,传入eval_r()的代码不能在调用程序所在的上下文中声明变量或定义
函数,二在非严格模式中可以这样的。姓范,变量和函数定义是在eval_r()创建的新作
用于中,这个作用域在eval_r()返回就弃用了。
三.let和var关键字的异同实例
1)声明后未赋值,表现相同:
‘use strict’;
(function() {
var varTest;
let letTest;
console.log(varTest); //输出undefined
console.log(letTest); //输出undefined
}());
2)使用未声明的变量,表现不同:
(function() {
console.log(varTest); //输出undefined(注意要注释掉下面一行才能运行)
console.log(letTest); //直接报错:ReferenceError: letTest is not defined
var varTest = ‘test var OK.’;
let letTest = ‘test let OK.’;
}());
3)重复声明同一个变量是,表现不同:
‘use strict’;
(function() {
var varTest = ‘test var OK.’;
let letTest = ‘test let OK.’;
var varTest = ‘varTest changed.’;
//直接报错:SyntaxError: Identifier ‘letTest’ has already been declared
let letTest = ‘letTest changed.’;
//输出varTest changed.(注意要注释掉上面letTest变量的重复声明才能运行)
console.log(varTest);
console.log(letTest);
}());
4)变量作用范围,表现不同
‘use strict’;
(function() {
var varTest = ‘test var OK.’;
let letTest = ‘test let OK.’;
{
var varTest = ‘varTest changed.’;
let letTest = ‘letTest changed.’;
}
//输出”varTest changed.”,内部”{}”中声明的varTest变量覆盖外部的letTest声明
console.log(varTest);
//输出”test let OK.”,内部”{}”中声明的letTest和外部的letTest不是同一个变量
console.log(letTest);
}());