在严格版中的默认的this不再是window,而是undefined。

先看两个例子

example one

      var num = 20;
var obj = {
num: 30,
fn: (function() {
this.num *= 3;
num += 15;
var num = 45;
return function() {
this.num *= 4;
num += 20;
console.log(num)
}
})(num)
};
var fn = obj.fn;
fn(); //因此时num是在fn函数定义的是个局部变量,num会自动找在哪里定义的找到初始值再计算,即45+20=65
obj.fn(); //因fn()执行的时候num改变成65了, 65+20=85

example two

      var num = 20;
var obj = {
num: 30,
fn: (function() {
this.num *= 3;
console.log(this) //因这里是个自执行函数的
num += 15;
var num = 45;
return function() {
this.num *= 4;
num += 20;
// console.log(this.num)
}
})(num)
};
var fn = obj.fn;
fn(); //因此时this指向window,在自执行函数执行的时候,this.num *= 3;此时window.num = 60,执行fn(),60*4 = 240
obj.fn(); //120 此时this指向obj,this.num = 30, 30*4 = 120

知识点一:this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象

(function(){
//浏览器中this指向window
}()); function a() {
console.log(this)
}
a() //window

知识点二:当this碰到return时

如果函数返回值为常规意义上的值类型(Number、String、Boolean)时,new函数将会返回一个该函数的实例对象,而如果函数返回一个引用类型(Object、Array、Function),则new函数返回改引用类型的对象

function fn()
{
this.name="吴小小"
return {}; //或者 rerurn function(){} 或者 return []
}
var a = new fn;
console.log(a.user); //undefined function fn()
{
this.name="吴小小"
return undefined; //或者 rerurn null
}
var a = new fn;
console.log(a); //fn {name: "吴小小"}

知识点三 apply call

apply或者call第一个参数是this作用域的指向,第二个以后指的是参数

(function(a){
console.log(this,a)
}).apply(0,[4,3])
// Number 4 (function(a){
console.log(this,a)
}).apply({},[4,3])
// {} 4 (function(a){
console.log(this,a)
}).apply(null,[4,3])
// window 4 (function(a){
console.log(this,a)
}).apply(undefined,[4,3])
// window 4

js考察this,作用域链和闭包的更多相关文章

  1. JS详细图解作用域链与闭包

    JS详细图解作用域链与闭包 攻克闭包难题 初学JavaScript的时候,我在学习闭包上,走了很多弯路.而这次重新回过头来对基础知识进行梳理,要讲清楚闭包,也是一个非常大的挑战. 闭包有多重要?如果你 ...

  2. 前端高质量知识(四)-JS详细图解作用域链与闭包

    攻克闭包难题 初学JavaScript的时候,我在学习闭包上,走了很多弯路.而这次重新回过头来对基础知识进行梳理,要讲清楚闭包,也是一个非常大的挑战. 闭包有多重要?如果你是初入前端的朋友,我没有办法 ...

  3. js深入(三)作用域链与闭包

    在之前我们根绝对象的原型说过了js的原型链,那么同样的js 万物皆对象,函数也同样存在这么一个链式的关系,就是函数的作用域链 作用域链 首先先来回顾一下之前讲到的原型链的寻找机制,就是实例会先从本身开 ...

  4. 1--面试总结-js深入理解,对象,原型链,构造函数,执行上下文堆栈,执行上下文,变量对象,活动对象,作用域链,闭包,This

    参考一手资料:http://dmitrysoshnikov.com/ecmascript/javascript-the-core/中文翻译版本:https://zhuanlan.zhihu.com/p ...

  5. js之作用域链到闭包

    一.作用域 全局作用域和函数作用域(局部作用域). 一个变量的作用域就是源代码中定义这个变量的区域. 二.作用域链和闭包 全局变量只有一个(window,globel),全局环境下每一个函数都会形成一 ...

  6. 在chrome开发者工具中观察函数调用栈、作用域链与闭包

    在chrome开发者工具中观察函数调用栈.作用域链与闭包 在chrome的开发者工具中,通过断点调试,我们能够非常方便的一步一步的观察JavaScript的执行过程,直观感知函数调用栈,作用域链,变量 ...

  7. 前端基础进阶(六):在chrome开发者工具中观察函数调用栈、作用域链与闭包

    在前端开发中,有一个非常重要的技能,叫做断点调试. 在chrome的开发者工具中,通过断点调试,我们能够非常方便的一步一步的观察JavaScript的执行过程,直观感知函数调用栈,作用域链,变量对象, ...

  8. 个人理解的javascript作用域链与闭包

    闭包引入的前提个人理解是为从外部读取局部变量,正常情况下,这是办不到的.简单的闭包举例如下: function f1(){ n=100; function f2(){ alert(n); } retu ...

  9. 聊一下JS中的作用域scope和闭包closure

    聊一下JS中的作用域scope和闭包closure scope和closure是javascript中两个非常关键的概念,前者JS用多了还比较好理解,closure就不一样了.我就被这个概念困扰了很久 ...

  10. 【进阶2-2期】JavaScript深入之从作用域链理解闭包(转)

    这是我在公众号(高级前端进阶)看到的文章,现在做笔记   https://github.com/yygmind/blog/issues/18 红宝书(p178)上对于闭包的定义:闭包是指有权访问另外一 ...

随机推荐

  1. 帆软报表(finereport)单元格中各颜色标识的含义

    帆软报表(finereport)单元格中,可根据单元格角标的颜色判断单元格进行的操作 过滤:单元格左下角黄色三角形 条件属性:单元格左上角红色三角形.  控件:单元格右侧中间的各种矩形.  左父格:单 ...

  2. 【原创】大数据基础之Spark(3)Spark Thrift实现原理及代码实现

    spark 2.1.1 一 启动命令 启动spark thrift命令 $SPARK_HOME/sbin/start-thriftserver.sh 然后会执行 org.apache.spark.de ...

  3. 【原创】大叔经验分享(9)yarn重要配置yarn.nodemanager.local-dirs

    yarn中有一个比较重要的配置yarn.nodemanager.local-dirs,如果配置的不好,在饱和状态运行下集群会出现很多问题:1 默认配置${hadoop.tmp.dir}/nm-loca ...

  4. Ethereum(1)—— 基本介绍

    1 环境安装 安装Ethereum 协议的Go语言的最新实现. git clone https://github.com/ethereum/go-ethereum.git make all cd bu ...

  5. Berlekamp_Massey 算法 (BM算法) 学习笔记

    原文链接www.cnblogs.com/zhouzhendong/p/Berlekamp-Massey.html 前言 BM算法用于求解常系数线性递推式. 它可以在 $O(n^2)$ 的时间复杂度内解 ...

  6. iOS12系统应用发送邮件中的附件

    iOS12系统应用发送邮件中的附件 iOS12系统应用发送邮件中的附件,如果发送邮件的内容很多,或者包含文档.图片等,可以以附件的形式进行发送.此时需要使用addAttachmentData(_:mi ...

  7. 微信小程序做radio,可以拖动进度条

    很简单的一个音乐播放器 data:{ src: 'http://ws.stream.qqmusic.qq.com/M500001VfvsJ21xFqb.mp3?guid=ffffffff82def4a ...

  8. django中models field详解

    本文参考自:django官方文档models/field 在model中添加字段的格式一般为:  field_name = field_type(**field_options) 一  field o ...

  9. python 3 实现文件下载的方法总结

    新学的python,兴奋不已,于是网上各种资源各种爬,发现对于同样文件下载,各个下载方法的速度是不一样的(目前就知道两种方法下载#尴尬) 下面分别看下吧: 下载同样的图片,方法二的速度是方法一的二倍 ...

  10. python3 使用代理

    #代理使用 >>> proxy_handler=urllib.request.ProxyHandler({'http':'211.81.31.18:8081'}) >>& ...