资讯专栏INFORMATION COLUMN

javascript 语言学习

wenyiweb / 1225人阅读

摘要:被调用的函数一定是在当前函数体内被调用的。所以,当前函数并没有暂停,只是交出了控制权而已。它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用。

函数

调用一个函数会暂停当前函数的执行,传递控制权和参数给新调用的函数,除了声明时传递的形式参数外,每个函数还会接受两个附加的参数: this和arguement.

其实在读到这句话的的时候,我产生了两个莫名其妙的疑问
1."调用一个函数会暂停当前函数的执行",这句话刚读起来觉得没什么问题,但是一分析我就觉得很不对。被调用的函数一定是在当前函数体内被调用的。所以,当前函数并没有暂停,只是交出了控制权而已。
2."每个函数还会接受两个附加的参数: this和argument",现在又有一个疑问,this和arguement是什么?至于arguement其实只是代表了实参列表,通过argument我们可以获取在参数调用实传递过来的参数

this代表什么?

曾经看过阮一峰大神的一篇博客是这么来定义javascript的this的。

它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用。随着函数使用场合的变化,this的值也会发生改变但是又一个总的原则,那就是this值得是,调用函数的那个对象。

我觉得这个定义还是很明白易懂的,这里主要透漏出两个重要的信息。其一:它是在函数调用时生成的而不是在函数定义时生成的。其二:它指向的是调用当前函数的对象。
在《你不知道的 javascript》中定义了"调用栈",可以通过逐步的分析调用栈来找出this的最终指向,而在本书中则列出了四种调用模式。调用模式不同则this的指向也不同。
1.方法调用模式下this会被绑定到当前的对象
这里首先必须要将方法和函数区分开,方法就是当一个函数被当作一个对象的属性时称其为方法
2.纯函数调用模式下this会被绑定到全局变量
3.构造器调用模式下this会被绑定到实例对象上
4.apply/call调用模式下可以自定义绑定到特定的对象上

闭包

理解闭包,首先要理解js的作用域,内部函数可以访问定义它的外部函数的参数和变量。但是当我们想要访问函数内部的变量时,就要用到闭包了。
闭包的主要作用其实有两个
1.其中一个就是访问函数内部定义的变量
2.另外就是可以让这些变量常驻内存
曾经看过一个关于闭包的定义

闭包是一个函数,而它"记住了周围发生的一切"。表现为由一个函数体中定义了另一个函数,闭包是一个表达式(一般是函数),它具有自由变量以及绑定这些变量的环境(该环境封闭了这个表达式)。(闭包,就是封闭了外部函数作用域中变量的内部函数。但是,如果外部函数不返回这个内部函数,闭包的特性无法显现。如果外部函数返回这个内部函数,那么返回的内部函数就成了名副其实的闭包。此时,闭包封闭的外部变量就是自由变量,而由于该自由变量存在,外部函数即便返回,其占用的内存也得不到释放。)

上面这句换主要说出了闭包的两个关键点:
闭包嵌套在外部函数内部
外部函数将闭包返回

    
   function outer() {
       var i= 10
    function inner() {
    console.log(i++)
    }
    return inner()
   }
   var result = outer()
   result()  //10
   result() //11
   result() //12
   
继承

javascript的继承是基于原型(proptype)的。我对原型的理解是,其实人家本来是一个没有车厢的火车头,然后我们就可以给这个火车头安装各种各样的车厢,长的扁的,圆的方的(当然没有圆的车厢哈),虽然车厢可以各种各样,但是火车头只有一个,各种车厢都可以用这个火车头。
实现继承主要是为了实现代码的重用,以及数据的共享,对于各种公用的属性,我们可以将它放在proptyps里面,例如:

    
    function Train(railway_carriage) {
        this.railway_carriage = railway_carriage  //各种安装车厢
    }

但是当我们想要给各种列车都设置一个相同的火车头,如果是这样

    
    function Train(railway_carriage, locomotive) {
        this.railway_carriage = carriage
        this.locomotive = locomotive
     }

如果这样的话,每一个列车实例都会有一个各自的locomotive属性,但是这些属性又是相同的,这样的结果明显是不符合我们的本意的。
那么,这样的话我们就得用刀proptype属性了

    
    Train.proptype = {
        locomotive: "D9999"
    }

这样所有的Train实例就回共享locomotive属性了

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/78707.html

相关文章

  • JavaScript,大有前景的编程语言

    摘要:年,保罗格雷厄姆在他的一篇文章中提到,他的公司决定使用一门编程语言。然而,仍未得到与其他语言同等的尊重。被评为年开发者调查中最受欢迎的框架。是中最流行的编程语言。也就是说,我认为质疑是否是一种真正的编程语言的时代已经过去。 原文:JavaScript-A First-Class Language At Last作者:Tom Goldenberg译者:LeviDing声明:转载请联系本人...

    Aklman 评论0 收藏0
  • JavaScript,大有前景的编程语言

    摘要:年,保罗格雷厄姆在他的一篇文章中提到,他的公司决定使用一门编程语言。然而,仍未得到与其他语言同等的尊重。被评为年开发者调查中最受欢迎的框架。是中最流行的编程语言。也就是说,我认为质疑是否是一种真正的编程语言的时代已经过去。 原文:JavaScript-A First-Class Language At Last作者:Tom Goldenberg译者:LeviDing声明:转载请联系本人...

    dayday_up 评论0 收藏0
  • JavaScript,大有前景的编程语言

    摘要:年,保罗格雷厄姆在他的一篇文章中提到,他的公司决定使用一门编程语言。然而,仍未得到与其他语言同等的尊重。被评为年开发者调查中最受欢迎的框架。是中最流行的编程语言。也就是说,我认为质疑是否是一种真正的编程语言的时代已经过去。 原文:JavaScript-A First-Class Language At Last作者:Tom Goldenberg译者:LeviDing声明:转载请联系本人...

    XiNGRZ 评论0 收藏0
  • 如何正确学习JavaScript

    摘要:然而,虽然先生对无所不知,被誉为世界的爱因斯坦,但他的语言精粹并不适合初学者学习。即便如此,在后面我还是会建议把当做补充的学习资源。但目前为止,依然是学习编程的好帮手。周正则表达式,对象,事件,阅读权威指南第,,,章。 既然你找到这篇文章来,说明你是真心想学好JavaScript的。你没有想错,当今如果要开发现代网站或web应用(包括互联网创业),都要学会JavaScript。而面对泛...

    canger 评论0 收藏0
  • TypeScript VS JavaScript 深度对比

    摘要:是事件驱动的,只根据用户的操作做出相应的反应处理。中的数据要求带有明确的类型,不要求。这些小小的变化可能会产生严重的意想不到的后果,因此有必要撤销这些变化。的优势相比于,也有一些明显优势。因此在应对大型开发项目时,使用更加合适。 showImg(https://segmentfault.com/img/bV1Dx7?w=740&h=322); TypeScript 和 JavaScri...

    William_Sang 评论0 收藏0
  • 10个学习JavaScript的免费在线资源

    摘要:学习最好的方法之一是通过视频教程进行在线学习。这里列出十个免费在线学习的地址,让你的学习更方便更有效。是一个非常好的免费在线学习得网站。为初学者增加了大量的指南和其他资源。在这里,你可以找到有关和的免费在线课程。 我们都听说过 JavaScript 这个术语,但我们中只有少数人知道它的用法和应用。这里的我们中的少数是指技术青年、网络程序员和IT专业人员。但是,对于外行来说,JavaS...

    chenatu 评论0 收藏0

发表评论

0条评论

阅读需要支付1元查看
<