zoukankan      html  css  js  c++  java
  • 对JS中函数的理解

    函数本质就是功能的集合

    JS中函数是对象,因此,函数名实际上仅仅是一个指向函数对象的指针,不会与某个函数绑定,所以,JS中没有重载(重载就是通过传递不同类型的参数,使两个相同函数名的函数执行不同的功能)

    var fn=function(a){return a+100;}
    fn=function(a){return a+200;}
    alert(fn(100));   //300
    

    要访问函数的引用(指针)而不是执行函数时,必须去掉圆括号,加上圆括号表示访问函数执行后的结果

    函数体内部的语句在执行时,一旦遇到return,函数就会结束(后面的代码不会执行),并返回返回值

    返回值可以是任何类型的值,如果没有return或只有return而没有返回值,则函数返回默认值undefined

    在函数内部,有两个特殊的对象arguments和this

      a.arguments是一个类似数组(但不是数组)的对象,用于保存函数的参数,即使函数定义时没有定义参数,arguments也会保存实际调用时使用的参数

      b.this表示当前函数执行的环境对象的引用

    function fn(){return this;}
    fn();

    函数拥有两个属性length和prototype

      a.length表示希望接收的参数个数,而不是实际接收的

      b.prototype保存了引用类型的所有实例方法(tostring(),valueOf()等等),在ES5中,prototype属性是无法枚举的

    函数拥有两个非继承而来的方法apply()和call(),这两个方法的作用都是在特定的作用域中调用函数实际上等于设置函数体内this对象的值

      a.apply()方法可以接收两个参数,一个是在其中运行函数的作用域,另一个是参数数组(可以没有),参数数组可以是Array的实例,也可以是arguments对象

      b.call()方法和apply()方法作用相同,但接收参数的方式不同,call()第二个参数只能是函数参数的数组形式,也就是说第二个参数必须一个一个列出来

    这两个方法常用来扩充作用域

      c.fn()==fn.call()==fn.apply()

    function fn1(a,b){return a+b;}
    function fn2(a,b){return fn1.apply(this,arguments);}
    alert(fn1(1,1));        //2
    alert(fn2(1,1));        //2
    
    function fn1(a,b){return a+b;}
    function fn2(a,b){return fn1.apply(this,[a,b]);}
    alert(fn1(1,1));        //2
    alert(fn2(1,1));        //2
    
    fn.call(window);       //fn在全局环境中执行
    fn.call(this);           //fn在当前环境中执行
    

    ES5中还定义了一个方法bind(),这个方法会创造一个函数的实例,其this值会被绑定到传给bind()方法的值

    window.color='red';
    var p={color:'blue'};
    function fn(){alert(this.color);}
    var fn0=fn.bind(p);
    fn0();        //blue
    

      

      

  • 相关阅读:
    三元表达式 列表和字典推导式 函数对象 名称空间 作用域 global和nonlocal 函数装饰器 枚举对象
    函数参数 打散机制 字符串比较 返回值
    函数简介
    三种字符串的介绍 文件的读写
    字符编码
    数据类型及其常用方法 数据类型转换 可变与不可变 值拷贝与深浅拷贝
    流程控制 while和for循环
    变量命名规范 常量 输入和输出 注释 数据类型 运算符 逻辑运算符
    语言分类 编译型和解释型语言分析 环境变量 代码执行的方式 pip介绍 变量
    Python django tests
  • 原文地址:https://www.cnblogs.com/frontendnotes/p/6426126.html
Copyright © 2011-2022 走看看