1.说说严格模式的限制
变量必须声明后再使用
函数的参数不能有同名属性,否则报错
不能使用with语句
不能对只读属性赋值,否则报错
不能使用前缀0表示八进制数,否则报错
不能删除不可删除的属性,否则报错
不能删除变量delete prop,会报错,只能删除属性delete global[prop]
eval不会在它的外层作用域引入变量
eval和arguments不能被重新赋值
arguments不会自动反映函数参数的变化
不能使用arguments.callee
不能使用arguments.caller
禁止this指向全局对象
不能使用fn.caller和fn.arguments获取函数调用的堆栈
增加了保留字(比如protected、static和interface)
设立"严格模式"的目的,主要有以下几个:
消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;
消除代码运行的一些不安全之处,保证代码运行的安全;
提高编译器效率,增加运行速度;
为未来新版本的Javascript做好铺垫。
注:经过测试IE6,7,8,9均不支持严格模式。
2.var、let、const之间的区别
var 声明的变量可以重复声明,而let不可以重复声明。
var 是不受限于块级的,而let是受限于块级的。
var 会与window相映射(会挂一个属性),而let不与window相映射。
var 可以在声明的上面访问变量,而let有暂存死区,在声明的上面访问变量会报错。
const和let一样不会与window相映射,支持块级作用域、在声明的上面访问变量会报错。
3.get和post区别?
1.get传值变量会显示在地址栏里,post会隐藏
2.查询数据用get,添加或修改用post
3.get长度有限制,post长度无限的
4.get请求数据可以收藏为书签,post不可以
5.get请求后,回退或刷新页面无影响,post会把数据重新提交
6.get历史参数会被保留到浏览器里,post不会保存
7.get只允许ACSLL编码,post没有编码限制
8.get的安全性较差,post的安全性较好
练习:实现类模板字符串的功能
let name='web';
let age=10;
let str=`你好,${name}已经${age}岁了`
str=str.replace(/\$\{([^}]*)\}/g,function(){
return eval(arguments[1]);
})
console.log(str);//你好,web已经10岁了