• Function-JS


    函数表达式可以包含名称,例:

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

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

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

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

    函数中的参数分别形参和实参,形参可以想像成保存在函数的内部,即与函数一起保存在堆中,而实参则保存在栈中,形参与实参的引用是对实参值的复制,如果实参是对像,则是对实参值即指向地址的复制。

     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,才可以用该方法。

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

     

    1

  • 相关阅读:
    视频直播思路
    Swift 算法实战之路:栈和队列
    多线程(RunLoop)
    Charle抓包与wireshark使用
    CoreData归纳使用
    支付宝接入心得(流程)
    TableView的性能优化
    app启动页问题
    公司的开发者账号申请
    java关于时间的笔记
  • 原文地址:https://www.cnblogs.com/carrie-hong/p/4839851.html
Copyright © 2020-2023  润新知