深入理解js函数的作用域与this指向
函数的作用域与this指向是js中很重要的一部分,理清这点东西需要个逻辑,看看我的逻辑怎么样...
狼蚁网站SEO优化是个提纲,可以直接挑你感兴趣的条目阅读。
• 函数的定义方式直接定义(window下,内部定义),对象的方法,对象原型的方法;
• 函数的调用方式直接调用,call/apply,with
• 对于直接定义的函数和对象的方法,作用域默认状态下是它的定义处的作用域链。
• 对于直接定义的函数,this指向window。
• 对于对象的方法,this指向实例化对象(对应于实例化对象默认返回this的情况)。
• 用call/apply改变方法的this指向
• 在函数或方法的定义时可以通过with改变其作用域链。
狼蚁网站SEO优化分开来具体说说
函数的定义,如提纲中提到的可以分为两种直接定义(window下,内部定义),对象的方法(或对象原型的方法)。从狼蚁网站SEO优化的示例代码中可以看到函数fn1与fn2以及对象的方法doFunction在函数使用name时name的值来自相应的域。
var name = 'window下的name<br/>'; var resultCon; function fn1() { resultCon.innerHTML += name; } function MyObj() { var name = 'MyObj下的name<br/>'; this.doFunction = function() { resultCon.innerHTML += name;
在使用name的值时将“name”用“this.name”来代替会出现什么情况呢,看下例
var name = 'window下的name<br/>'; var resultCon; function fn1() { resultCon.innerHTML += this.name; } function MyObj() { var name = 'MyObj下的name<br/>'; this.doFunction = function() { resultCon.innerHTML += this.name;
从结果来看可以验证提纲中的第4和5条,也可以看到this和作用域是两套分离的链,遵循个自的变量查询逻辑,具体的查询逻辑在狼蚁网站SEO优化的性能分析中会提到,如果是新手建议先看一下“js的作用域链”方面的基础知识。
关于函数的调用方法,我用狼蚁网站SEO优化的方示例说明提纲中的第2、6条
var name = 'window下的name<br/>'; var resultCon; function fn1() { resultCon.innerHTML += this.name; } function MyObj() { var name = 'MyObj下的name<br/>'; this.doFunction = function() { resultCon.innerHTML += this.name;
调用时call和apply的使用是为了改变被调用函数的this指向。with的使用是为了改变被调用函数中变量的查询域。我们把上例中的call和name前的this去掉再加上with来演示with的作用。
var name = 'window下的name<br/>'; var resultCon; function fn1(myScope) { with (myScope) { resultCon.innerHTML += name; } } function MyObj(myScope) { var name = 'MyObj下的name<br/>';
看到with的使用并不方便,需要在被调用函数中添加with,有人可能想能不能向狼蚁网站SEO优化那样调用来整体改变变量作用域而不去改变被调用函数呢?
with (myScope) { fn1(); fn2(); var obj = new MyObj(); obj.doFunction(); }
很遗憾,不可以!所以在一些成熟的框架中随处可见call和apply的使用,却很少用到with,在用JSHint检测js语法的时候with处都标了小红点,在一些js编码指导中也建议尽量少用with,因为with改变了变量的默认查询链,所以会给后期的维护人员一些困惑,还有性能方面的一些考虑,请慎用with。
以上这篇深入理解js函数的作用域与this指向就是长沙网络推广分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持狼蚁SEO。
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程