码迷,mamicode.com
首页 > Web开发 > 详细

JS深入浅出

时间:2018-02-11 10:52:34      阅读:260      评论:0      收藏:0      [点我收藏+]

标签:address   err   封装   fine   home   amp   测试   property   ring   

narquee 实现信息滚动

deocument.write("    \

");代码太长可以用\折行

 

测试:
document.write();

console.log();

alert();

firstName(小驼峰)

FirstName(大驼峰)

isNaN();

typeof undefined undefined

typeof NaN number

0/undfined/null/NaN---false(隐士转换 Boolean) 

undefined——‘undefined’        null---‘null’  true---“true” (隐士转换 String) 

 

 

创建词法环境:扫描js中的两部分@用声明方式创建的函数(function xx(){})  @用var定义的变量(var a=3;)
命名冲突的时候:函数名大于变量名   函数下面的会覆盖上面的   变量相同只认第一个

LexicalEnvironment:{

a:undefined

xxx:对函数的引用

}

函数预处理:函数每次调用都产生一个LexicalEnvironment  

                    函数中的参数,在调用时,已成为词法环境的成员。

eg:function(a,b){

alert(a);

alert(b);

function a(){

alert(a);

}

}

f(1,2);

调用之前:

LexicalEnvironment{

a:1(后改为指向函数的引用)

b:2,

argumnets:实参个数

}

函数中无war声明的变量会变成全局变量

函数中的变量全局不可访问,只属于函数词法环境中

 

词法作用域(静态作用域,在声明时已经确定相关作用域)、

@给函数本身添加【【scope】】

f[[scope]]==window

@函数真正执行时

f会创建自己的词法环境

f.le---->f[[scope]]

 

eg:function f(){

var x=10;

function g(){

g();

}

}

g.le-->g.[[scope]]-->f.le---->f.[[scope]]--->window

注意:用new Function()创建的函数,函数的g[[scope]]===window

闭包:CLosure Varible

  闭包即一个对象(包含子函数,变量)

  闭包的本质即作用域,闭包的好处:封装,防止全局污染,减少传参。

        每次调用父函数,就会产生新的闭包。

  相互关联的词法环境,必须同时停止时,才能全部停止。

  若子函数未用到父函数的变量,则不会产生闭包

    eg:function(){   作用域的用途,线性隐藏

    var a=5;

    var b=6;

    function f(){}

    window.f=f;

  }

 

闭包解决循环问题(函数一旦调用,就会产生新的闭包)

for(var i=0;i>10;i++){

ele.onclick=(function(i){

return function(){

alert(i);

}

})(i)

}

 

OOP(oriented object programming)面向对象编程

1,自己创建变量:
var p={};

var p={name:  , age: ,  get age(){return this.age;

},set age(val){

this.age=val;

}} ;

 

p.age =======  p["age"]

p.a=====无a属性出现,结果undefined

 

2,Object()函数创建变量

var o=new Object();

o.toString();继承父类的东西。

给对象加成员,对象属性

Object.defineProperty(对象,属性,{value: ,writable:  。。。});  默认所有属性特性为false

Object.defineProperties(对象,{属性:{   value:  ,  get:function(){   ....}},   属性:{   value:  ,  get:function(){   ....}}

                                                  });

对象的操作:成员遍历

for(xs in p){

xs   属性名

p[]

}

 

throw new Error("...........")

 属性级联

var res=p&& p.addresss && p.adddress.home;  一个false,返回false的值。  全为true返回最后一个值

||   返回第一个true值,全为false取最后的值

 

JS深入浅出

标签:address   err   封装   fine   home   amp   测试   property   ring   

原文地址:https://www.cnblogs.com/huiminxu/p/8440490.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!