自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Sunface撩技术

大道至简,技术如歌,欢迎来到Sunface的博客,https://im.dev

  • 博客(16)
  • 收藏
  • 关注

原创 想学JS的原型和闭包吗?COME ON(16)

之前一共用15篇文章,把javascript的原型和闭包。   首先,javascript本来就“不容易学”。不是说它有多难,而是学习它的人,往往都是在学会了其他语言之后,又学javascript。有其他语言的学习经历和实践经历,再加上自学javascript,边学边用,肯定会产生许多误解,走许多弯路。我就没少经历,也算是一种教训。  其次,原型和闭包又是一对难兄难弟,一来是他俩比较难懂,而来

2015-02-27 11:17:17 1288 1

原创 想学JS的原型和闭包吗?COME ON(15)

前面提到的上下文环境和作用域的知识,除了了解这些知识之外,还是理解闭包的基础。至于“闭包”这个词的概念的文字描述,确实不好解释,我看过很多遍,但是现在还是记不住。但是你只需要知道应用的两种情况即可——函数作为返回值,函数作为参数传递。第一,函数作为返回值              或者 fn()(15);如上代码,bar函数作为返回值,赋值给f1变量。执行f1(15)时,用到了fn作用域下的m

2015-02-27 11:16:43 1210

原创 想学JS的原型和闭包吗?COME ON(14)

先解释一下什么是“自由变量”。在A作用域中使用的变量x,却没有在A作用域中声明(即在其他作用域中声明的),对于A作用域来说,x就是一个自由变量。如下图如上程序中,在调用fn()函数时,函数体中第6行。取b的值就直接可以在fn作用域中取,因为b就是在这里定义的。而取x的值时,就需要到另一个作用域中取。到哪个作用域中取呢?有人说过要到父作用域中取,其实有时候这种解释会产生歧义。例如:所以,不要在用

2015-02-27 11:16:34 1202

原创 想学JS的原型和闭包吗?COME ON(13)

上文简单介绍了作用域,本文把作用域和上下文环境结合起来说一下,会理解的更深一些。如上图,我们在上文中已经介绍了,除了全局作用域之外,每个函数都会创建自己的作用域,作用域在函数定义时就已经确定了。而不是在函数调用时确定。下面我们将按照程序执行的顺序,一步一步把各个上下文环境加上。另外,对上下文环境不了解的朋友,可以去看看之前的两篇文章第一步,在加载程序时,已经确定了全局上下文环境,并随着程序的执

2015-02-27 11:15:30 1225

原创 想学JS的原型和闭包吗?COME ON(12)

提到作用域,有一句话大家(有js开发经验者)可能比较熟悉:“javascript没有块级作用域”。所谓“块”,就是大括号“{}”中间的语句。例如if语句:         再比如for语句:所以,我们在编写代码的时候,不要在“块”里面声明变量,要在代码的一开始就声明好了。以避免发生歧义。如:其实,你光知道“javascript没有块级作用域”是完全不够的,你需要知道的是——javascript

2015-02-27 11:14:56 1232

原创 想学JS的原型和闭包吗?COME ON(11)

继续上文的内容。执行全局代码时,会产生一个执行上下文环境,每次调用函数都又会产生执行上下文环境。当函数调用完成时,这个上下文环境以及其中的数据都会被消除,再重新回到全局上下文环境。处于活动状态的执行上下文环境只有一个。其实这是一个压栈出栈的过程——执行上下文栈。如下图:可根据以下代码来详细介绍上下文栈的压栈、出栈过程。如上代码。在执行代码之前,首先将创建全局上下文环境。然后是代码执行。代码执行

2015-02-27 11:14:33 1152

原创 想学JS的原型和闭包吗?COME ON(10)

接着上一节讲的话,应该轮到“执行上下文栈”了,但是这里不得不插入一节,把this说一下。因为this很重要,js的面试题如果不出几个与this有关的,那出题者都不合格。 其实,this的取值,分四种情况。我们来挨个看一下。在此再强调一遍一个非常重要的知识点:在函数中this到底取何值,是在函数真正被调用执行的时候确定的,函数定义的时候确定不了。因为this的取值是执行上下文环境的一部分,每次调

2015-02-27 11:13:04 1218

原创 想学JS的原型和闭包吗?COME ON(9)

上一篇我们讲到在全局环境下的代码段中,执行上下文环境中有如何数据:变量、函数表达式——变量声明,默认赋值为undefined;this——赋值;函数声明——赋值; 如果在函数中,除了以上数据之外,还会有其他数据。先看以下代码:以上代码展示了在函数体的语句执行之前,arguments变量和函数的参数都已经被赋值。从这里可以看出,函数每被调用一次,都会产生一个新的执行上下文环境。因为不同的调用可能

2015-02-27 11:12:47 1235

原创 想学JS的原型和闭包吗?COME ON(8)

什么是“执行上下文”(也叫做“执行上下文环境”)?暂且不下定义,先看一段代码:第一句报错,a未定义,很正常。第二句、第三句输出都是undefined,说明浏览器在执行console.log(a)时,已经知道了a是undefined,但却不知道a是10(第三句中)。在一段js代码拿过来真正一句一句运行之前,浏览器已经做了一些“准备工作”,其中就包括对变量的声明,而不是赋值。变量赋值是在赋值语句执

2015-02-27 11:11:31 1303

原创 想学JS的原型和闭包吗?COME ON(7)

在Java和C#中,你可以简单的理解class是一个模子,对象就是被这个模子压出来的一批一批月饼(中秋节刚过完)。压个啥样,就得是个啥样,不能随便动,动一动就坏了。而在javascript中,就没有模子了,月饼被换成了面团,你可以捏成自己想要的样子。 首先,对象属性可以随时改动。对象或者函数,刚开始new出来之后,可能啥属性都没有。但是你可以这会儿加一个,过一会儿在加两个,非常灵活。在jQue

2015-02-27 11:11:17 1149

原创 想学JS的原型和闭包吗?COME ON(6)

为何用“继承”为标题,而不用“原型链”?原型链如果解释清楚了很容易理解,不会与常用的java/C#产生混淆。而“继承”确实常用面向对象语言中最基本的概念,但是java中的继承与javascript中的继承又完全是两回事儿。因此,这里把“继承”着重拿出来,就为了体现这个不同。 javascript中的继承是通过原型链来体现的。先看几句代码以上代码中,f1是Foo函数new出来的对象,f1.a是f

2015-02-27 11:10:21 1257

原创 想学JS的原型和闭包吗?COME ON(5)

又介绍一个老朋友——instanceof。对于值类型,你可以通过typeof判断,string/number/boolean都很清楚,但是typeof在判断到引用类型的时候,返回值只有object/function,你不知道它到底是一个object对象,还是数组,还是new Number等等。这个时候就需要用到instanceof。例如:[javascript] view plaincopyp

2015-02-27 11:09:44 1203

原创 想学JS的原型和闭包吗?COME ON(4)

注意:本文不是javascript基础教程,如果你没有接触过原型的基本知识,应该先去了解一下,推荐看《javascript高级程序设计(第三版)》第6章:面向对象的程序设计。上节已经提到,每个函数function都有一个prototype,即原型。这里再加一句话——每个对象都有一个_ _proto_ _,可成为隐式原型。这个_ _proto_ _是一个隐藏的属性,javascript不希望开发

2015-02-27 11:06:51 1261

原创 想学JS的原型和闭包吗?COME ON(3)

既typeof之后的另一位老朋友!prototype也是我们的老朋友,即使不了解的人,也应该都听过它的大名。如果它还是您的新朋友,我估计您也是javascript的新朋友。 在咱们的第一节中说道,函数也是一种对象。他也是属性的集合,你也可以对函数进行自定义属性。不用等咱们去试验,javascript自己就先做了表率,人家就默认的给函数一个属性——prototype。对,每个函数都有一个属性叫做

2015-02-27 11:05:13 1222 1

原创 想学JS的原型和闭包吗?COME ON(2)

上文提到,函数就是对象的一种,因为通过instanceof函数可以判断。[javascript] view plaincopyprint?var fn = function () { };  console.log(fn instanceof Object);  // true  var fn = function () { };console.log(fn instanceof Objec

2015-02-27 11:03:27 922

原创 想学JS的原型和闭包吗?COME ON(1)

 该教程绕开了javascript的一些基本的语法知识,直接讲解javascript中最难理解的两个部分,也是和其他主流面向对象语言区别最大的两个部分——原型和闭包,当然,肯定少不了原型链和作用域链。帮你揭开javascript最神秘的面纱。  为什么要偏偏要讲这两个知识点?  这是我在这么多年学习javascript的经历中,认为最难理解、最常犯错的地方,学习这两个知识点,会让你对javas

2015-02-27 10:40:09 1064

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除