关于javaScript的Function对象

声明方式

  • 函数表达式:
    使用const,let,var等进行函数的声明,如:
    var Fn = function(){}

    其特点是只有在解析器解析到它所在的代码才会执行,在这之前访问,都是undefined,并且使用const,let时,提前访问会报错

  • 函数声明:
    使用function关键字进行函数声明,如:

    function Fn(){}

    其特点是在预编译期就已经被解析器读取并添加到执行环境中,所以在代码中的任何位置都可以访问到这个函数;

函数的内部属性

  • arguments对象:保存函数参数,具有callee属性,该属性是一个指针,指向arguments对象的函数
  • this对象:引用的是函数据以执行的韩静对象,函数调用前,this指向不确定
  • caller属性:保存着调用当前函数的函数引用,如果在全局作用域中调用当前函数,它的值为null

注意:
        当函数在严格模式下运行时,访问arguments.callee会导致错误。ECMAScript5中的arguments.caller属性在严格模式下访问也会导致错误,而在非严格模式下这个属性始终是undefined。定义这个属性是为了分清arguments.caller属性。还有一个限制:不能为函数的caller属性赋值,否则会导致错误

函数的属性和方法

  • length:表示函数希望接受的命名参数的个数

  • prototype:保存所有实例方法,实现集成

  • apply( ):接受两个参数,一是在其运行函数的中的函数作用域,另一个是参数数组(可以是Array,也可以是arguments对象);

  • call( ):与apply大致相同,区别在于除了第一个参数为在其运行函数中的函数作用域,其他函数都是直接传递给函数,即必须逐个列举出来;

  • bind( ):ECMAScript定义了bind( )方法。此方法会创建一个函数的实例,其this值会并单到传给bind( )函数的值

  • toLocaleString( ),toString( ),valueOf( ):始终都会返回函数的代码

注意:

         在严格模式下,未指定函数对象而调用函数,则this不会转型为window。除非明确吧函数添加到某个对象或者调用apply( )或者call( ),否则this值是undefined;

注意:

  • 任何函数在任何时候都可以通过return语句后跟要返回的值来实现返回值
  • return语句后的所有代码都不会执行;return可以用来打断函数,但不返回值
  • 函数传入的参数保存在当前函数的arguments对象中,并且传入的参数不受到形参的限制,arguments类似数组,但并不是Array的实例
  • 可以通过argumnets的长度让函数根据接受的参数不同,实现不同的功能逻辑
  • 没有传递值的命名参数将自动被赋予undefined,与定义了变量未初始化一样
  • ECMAScript中所有的参数传递都是值,不可能通过引用传递参数
  • ECMAScript没有真正意义上的重载,但可以通过检查传入的参数类型和属性并作出不同的反应,可以模仿方法的重载
  • 函数的重复声明会使得前面定义的函数被后面定义的函数所覆盖
  • 在传递参数时,传入的变量在函数中其实创建了一个新的变量,并把传入的变量的值复制后传递给创建出来的变量,当传入变量是引用类型时,此变量与创建的变量指向的是同一个对象,修改里面的对象,外面也会改变,但如果在函数内重新赋予此变量新的对象(即创建新的引用)时,内部新的对象就是一个局部的对象与之前传入的变量的对象不通(因为指针的指向已经不同),函数执行完毕后立即被销毁
  • 函数名仅仅是指向函数的指针
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值