最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

详细介绍JavaScript函数的作用域与this指向

来源:动视网 责编:小OO 时间:2020-11-27 20:13:07
文档

详细介绍JavaScript函数的作用域与this指向

函数的作用域与this指向是js中很重要的一部分,理清这点东西需要个逻辑,看看我的逻辑怎么样..。下面是个提纲,可以直接挑你感兴趣的条目阅读。? 函数的定义方式:直接定义(window下,内部定义),对象的方法,对象原型的方法。? 函数的调用方式:直接调用,call/apply,with。? 对于直接定义的函数和对象的方法,作用域默认状态下是它的定义处的作用域链。? 对于直接定义的函数,this指向window。? 对于对象的方法,this指向实例化对象(对应于实例化对象默认返回this的情况)。? 用call/apply改变方法的this指向。? 在函数或方法的定义时可以通过with改变其作用域链。下面分开来具体说说。
推荐度:
导读函数的作用域与this指向是js中很重要的一部分,理清这点东西需要个逻辑,看看我的逻辑怎么样..。下面是个提纲,可以直接挑你感兴趣的条目阅读。? 函数的定义方式:直接定义(window下,内部定义),对象的方法,对象原型的方法。? 函数的调用方式:直接调用,call/apply,with。? 对于直接定义的函数和对象的方法,作用域默认状态下是它的定义处的作用域链。? 对于直接定义的函数,this指向window。? 对于对象的方法,this指向实例化对象(对应于实例化对象默认返回this的情况)。? 用call/apply改变方法的this指向。? 在函数或方法的定义时可以通过with改变其作用域链。下面分开来具体说说。


下面小编就为大家带来一篇深入理解js函数的作用域与this指向。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

函数的作用域与this指向是js中很重要的一部分,理清这点东西需要个逻辑,看看我的逻辑怎么样...

下面是个提纲,可以直接挑你感兴趣的条目阅读。

? 函数的定义方式:直接定义(window下,内部定义),对象的方法,对象原型的方法;

? 函数的调用方式:直接调用,call/apply,with

? 对于直接定义的函数和对象的方法,作用域默认状态下是它的定义处的作用域链。

? 对于直接定义的函数,this指向window。

? 对于对象的方法,this指向实例化对象(对应于实例化对象默认返回this的情况)。

? 用call/apply改变方法的this指向

? 在函数或方法的定义时可以通过with改变其作用域链。

下面分开来具体说说:

函数的定义,如提纲中提到的可以分为两种:直接定义(window下,内部定义),对象的方法(或对象原型的方法)。从下面的示例代码中可以看到函数fn1与fn2以及对象的方法doFunction在函数使用name时name的值来自相应的域。

在使用name的值时将“name”用“this.name”来代替会出现什么情况呢,看下例:

从结果来看可以验证提纲中的第4和5条,也可以看到this和作用域是两套分离的链,遵循个自的变量查询逻辑,具体的查询逻辑在下面的性能分析中会提到,如果是新手建议先看一下“js的作用域链”方面的基础知识。

关于函数的调用方法,我用下面的方示例说明提纲中的第2、6条:

调用时call和apply的使用是为了改变被调用函数的this指向。with的使用是为了改变被调用函数中变量的查询域。我们把上例中的call和name前的this去掉再加上with来演示with的作用。

看到with的使用并不方便,需要在被调用函数中添加with,有人可能想能不能向下面那样调用来整体改变变量作用域而不去改变被调用函数呢?

很遗憾,不可以!所以在一些成熟的框架中随处可见call和apply的使用,却很少用到with,在用JSHint检测js语法的时候with处都标了小红点,在一些js编码指导中也建议尽量少用with,因为with改变了变量的默认查询链,所以会给后期的维护人员一些困惑,还有性能方面的一些考虑,请慎用with。

文档

详细介绍JavaScript函数的作用域与this指向

函数的作用域与this指向是js中很重要的一部分,理清这点东西需要个逻辑,看看我的逻辑怎么样..。下面是个提纲,可以直接挑你感兴趣的条目阅读。? 函数的定义方式:直接定义(window下,内部定义),对象的方法,对象原型的方法。? 函数的调用方式:直接调用,call/apply,with。? 对于直接定义的函数和对象的方法,作用域默认状态下是它的定义处的作用域链。? 对于直接定义的函数,this指向window。? 对于对象的方法,this指向实例化对象(对应于实例化对象默认返回this的情况)。? 用call/apply改变方法的this指向。? 在函数或方法的定义时可以通过with改变其作用域链。下面分开来具体说说。
推荐度:
标签: js 函数 javascript
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top