函数的进阶
在前两天学习函数的进阶过程中,有两大点:
1、this的指向
2、use strict的作用
this的指向问题
(1)普通函数this的指向是window
(2)定时器中this也指向window
(3)构造函数中this的指向是实例对象
(4)对象的方法中this的指向也是实例对象
(5)原型中的this的指向也是实例对象
use strict
(1)介绍严格模式
(2)严格模式影响范围
变量: var、delete、变量关键字
对象: 只读属性、 对象字面量属性重复申明
函数:参数重名、arguments对象、申明
其他:this、eval、关键字…
严格模式
ECMAScript 5 引入严格模式(‘strict mode’)概念。通过严格模式,在函数内部选择进行较为严格的全局或局部的错误条件检测,使用严格模式的好处是可以提早知道代码中的存在的错误,
及时捕获一些可能导致编程错误的ECMAScript行为。在开发中使用严格模式能帮助我们早发现错误。
设立"严格模式"的目的,主要有以下几个:错误检测、规范、效率、安全、面向未来
- 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;
- 消除代码运行的一些不安全之处,保证代码运行的安全;
- 提高编译器效率,增加运行速度;
- 为未来新版本的Javascript做好铺垫。
进入"严格模式"的编译指示,是下面这行语句:
"use strict";
这个语法从ECMAScript 3 开始支持。向后兼容不支持严格模式的浏览器,他们就当遇到了一个普通字符串,编译时忽略。
将"use strict"放在脚本文件的第一行,则整个脚本都将以"严格模式"运行。
如果这行语句不在第一行,则无效,整个脚本以"正常模式"运行。
如果不同模式的代码文件合并成一个文件,这一点需要特别注意。
(严格地说,只要前面不是产生实际运行结果的语句,"use strict"可以不在第一行,比如直接跟在一个空的分号后面。)
补充:
eval
eval是做什么的?
是将字符串类型隐式转化为数组。
Javascript中,有一个函数,执行时对象查找时,永远不会去查找原型,这个函数是?
是:HasOwnprototype函数