接着上一节讲的话,应该轮到“执行上下文栈”了,但是这里不得不插入一节,把this说一下.因为this很重要,js的面试题如果不出几个与this有关的,那出题者都不合格. 其实,this的取值,分四种情况.我们来挨个看一下. 在此再强调一遍一个非常重要的知识点:在函数中this到底取何值,是在函数真正被调用执行的时候确定的,函数定义的时候确定不了.因为this的取值是执行上下文环境的一部分,每次调用函数,都会产生一个新的执行上下文环境. 情况1:构造函数 所谓构造函数就是用来new对象的函数.其实…
该教程绕开了javascript的一些基本的语法知识,直接讲解javascript中最难理解的两个部分,也是和其他主流面向对象语言区别最大的两个部分--原型和闭包,当然,肯定少不了原型链和作用域链.帮你揭开javascript最神秘的面纱. 为什么要偏偏要讲这两个知识点? 这是我在这么多年学习javascript的经历中,认为最难理解.最常犯错的地方,学习这两个知识点,会让你对javascript有更深层次的理解,至少理解了原型和作用域,就不能再算是javascript菜鸟了.另外,这两方面也是…
从下面目录中可以看到,本系列有16篇文章,外加两篇后补的,一共18篇文章.写了半个月,从9月17号开始写的.每篇文章更新时,读者的反馈还是可以的,虽然不至于上头条,但是也算是中规中矩,有看的人,也有评论的人.特别是在后期讲闭包的时候. 我从来都不做基础入门教程,因为基础入门的教程,要想讲的和别人不一样很难.所以,基础入门的教程网上有的是,大家随便搜索就是了,再大不了就花钱买本书看看.而想原型和闭包这类的稍微高级一些的教程,仔细想想,还真的有的讲,真的能讲出自己的思路. 我觉得只要是自己埋头要做的…
“一切都是对象”这句话的重点在于如何去理解“对象”这个概念. ——当然,也不是所有的都是对象,值类型就不是对象. 首先咱们还是先看看javascript中一个常用的函数——typeof().typeof应该算是咱们的老朋友,还有谁没用过它? typeof函数输出的一共有几种类型,在此列出: function show(x) { console.log(typeof(x)); // undefined console.log(typeof(10)); // number console.log(t…
上文(理解javascript原型和作用域系列(1)——一切都是对象)已经提到,函数就是对象的一种,因为通过instanceof函数可以判断. var fn = function () { }; console.log(fn instanceof Object); // true 对!函数是一种对象,但是函数却不像数组一样——你可以说数组是对象的一种,因为数组就像是对象的一个子集一样.但是函数与对象之间,却不仅仅是一种包含和被包含的关系,函数和对象之间的关系比较复杂,甚至有一点鸡生蛋蛋生鸡的逻辑…
什么是“执行上下文”(也叫做“执行上下文环境”)?暂且不下定义,先看一段代码: 第一句报错,a未定义,很正常.第二句.第三句输出都是undefined,说明浏览器在执行console.log(a)时,已经知道了a是undefined,但却不知道a是10(第三句中). 在一段js代码拿过来真正一句一句运行之前,浏览器已经做了一些“准备工作”,其中就包括对变量的声明,而不是赋值.变量赋值是在赋值语句执行的时候进行的.可用下图模拟: 这是第一种情况. 下面还有.先来个简单的. 有js开发经验的朋友应该…
继续上一篇文章(http://www.cnblogs.com/wangfupeng1988/p/3986420.html)的内容. 上一篇我们讲到在全局环境下的代码段中,执行上下文环境中有如何数据: 变量.函数表达式——变量声明,默认赋值为undefined: this——赋值: 函数声明——赋值: 如果在函数中,除了以上数据之外,还会有其他数据.先看以下代码: 以上代码展示了在函数体的语句执行之前,arguments变量和函数的参数都已经被赋值.从这里可以看出,函数每被调用一次,都会产生一个新…
上文简单介绍了作用域,本文把作用域和上下文环境结合起来说一下,会理解的更深一些. 如上图,我们在上文中已经介绍了,除了全局作用域之外,每个函数都会创建自己的作用域,作用域在函数定义时就已经确定了.而不是在函数调用时确定. 下面我们将按照程序执行的顺序,一步一步把各个上下文环境加上.另外,对上下文环境不了解的朋友,可以去看看之前的两篇文章: http://www.cnblogs.com/wangfupeng1988/p/3986420.html http://www.cnblogs.com/wan…
前面提到的上下文环境和作用域的知识,除了了解这些知识之外,还是理解闭包的基础. 至于“闭包”这个词的概念的文字描述,确实不好解释,我看过很多遍,但是现在还是记不住. 但是你只需要知道应用的两种情况即可——函数作为返回值,函数作为参数传递. 第一,函数作为返回值 如上代码,bar函数作为返回值,赋值给f1变量.执行f1(15)时,用到了fn作用域下的max变量的值.至于如何跨作用域取值,可以参考上一节. 第二,函数作为参数被传递 如上代码中,fn函数作为一个参数被传递进入另一个函数,赋值给f参数.…
本文对<深入理解javascript原型和闭包(10)——this>一篇进行补充,原文链接:http://www.cnblogs.com/wangfupeng1988/p/3988422.html 原文中,讲解了在javascript中this的各个情况,写完之后发现还落下一种情况,就此补充. 原文中this的其中一种情况是构造函数的,具体的内容可以参考原文,此处不再赘述. 要补充的内容是,在构造函数的prototype中,this代表着什么. 如上代码,在Fn.prototype.getNa…