Function-JS

函数表达式能够包含名称,例:javascript

var f=function factorial(x){if(x<=1)return 1;else return x*factorial(x-1);}java

中,factorial这个函数对象的名称包含在函数做用域中,成为该函数的局部变量。函数

 

函数声明与函数字面量建立函数最大的不一样是:函数声明会提早预加载,即函数声明语句被提早到外部脚本或外部函数做用域的顶部。一样以var 定义的变量也会预加载。spa

预加载:JS代码在运行前都要进行预加载,目的是事先构造运行环境例如全局环境、函数运行环境、构造做用域链,而环境和做用域的构造的核心内容就是指定好变量属于哪一个范畴,所以在JS中变量的定义是在预加载完成而非在运行期间。prototype

 

函数中的参数分别形参和实参,形参能够想像成保存在函数的内部,即与函数一块儿保存在堆中,而实参则保存在栈中,形参与实参的引用是对实参值的复制,若是实参是对像,则是对实参值即指向地址的复制。code

 function testFtn(sNm,pObj){

        console.log(sNm);// 运行结果:new Name

        console.log(pObj.oName);// 运行结果:new obj

        sNm = "change name";

        pObj.oName = "change obj";

    }

    var sNm = "new Name";

    var pObj = {oName:"new obj"};

    testFtn(sNm,pObj);

    console.log(sNm);// 运行结果:new Name

    console.log(pObj.oName);// 运行结果:change obj
复制代码

 

var p=null;
var o=Object.create(null);
typeof p;//"object"
typeof o;//"object"
p instanceof Object;//false
o instanceof Object;//false

  p与o同样都不具备原形属性。p!==o,p!=o,说明这两种方法所得的p与o是不相同的。对象

 

1 function inherite(p){
2     if(p===null) throw TypeError();
3     if(Object.create)return Object.create(p);
4     if(typeof p!=='object'&&typeof p!=='function') throw TypeError();
5     function f(){};
6     f.prototype=p;
7     return new f();      
8 }

注:1.Object.create()的第一个参数是原型对象。Object prototype may only be an object or null.因此p必须是一个对象或者是null,才能够用该方法。blog

      2.具备prototype属性的必须是一个函数。即f.prototype=p。ip

 

 

 

 

1作用域

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息