haodsljsljflsjd

    JS是Web前端的脚本语言,于1995年在NetScape 2.0中首次出现,现在浏览器端默认的脚步语言就是javascript.学习JS也有一些时间了,总结一下。

    JS是相对简单的脚本,本文主要讲JS的8个核心知识点:

基础部分:

   1. js有5种类型:undefined,null,number,string,object.

   2.变量作用域

   js的变量作用域问题是一个很容易犯错的地方,其中我觉得有个不好的是没用var声明就默认为全局变量,(当然如果你启动js严格模式的话,那么就不会出现这个问题了)稍微不注意就会污染全局。

   要特别注意js没有块级作用域只有函数级作用域,这点会让初学者很迷惑。下面来讲个例子:

  if(true){

      var testVal = 5;

  }

   function alertVal(){

     alert(testVal);

   }

 如果你得出的结论是undefined那你就掉进陷井了,你还没了解到函数级作用域的精髓。在函数级作用域的语言里,这小块代码得出的结果将是5。

js中用let关键字声明的变量式块级作用域,不过IE不支持。

3. 作用域链

    js的作用域链和其他语言的作用域链类似,都是基于方法调用栈进行叠加。

4. this

    如果你习惯里面向对象编程,那么,在理解JS的this上,你可能要把你的世界观推到重建了。面向对象的语言了,this就代表当前对象,不会变化,而JS中,this是随着服务对象的改变而改变的。这点既带来了灵活性,又带来了易错的点。JS中的this在作用域顶层时默认是window,在严格模式中则为null。

高级部分::

5. prototype

    js中所有的函数对象都具有这个属性,此属性引用了当前函数对象的父函数对象。我们能够利用prototype做两件事: 1. 扩展公共方法和属性;   2. 实现原型继承。所有用户定义的函数对象的prototype默认值为Object.  Function对象的prototype为 function empty(){};

js对象和函数对象还有一个和prototype比较容易混掉的属性: _proto_。 _proto_是js内部确原型链的属性,是不对外暴露的。(FF和chrome除外)。

6. 继承

   js的继承都是基于原型链的,主要的实现方式有两种: 1. 将子类构造函数的prototype属性指向父类   2. 调用apply, call 方法,

7. 闭包

闭包主要有两个作用,一个是访问函数局部变量,一个是让变量保持在内存中。

 

posted on 2014-09-06 00:57  Sicheng  阅读(97)  评论(0)    收藏  举报