所在的位置: js >> js优势 >> js中对函数的深入理解下

js中对函数的深入理解下

中科医院用爱心承担责任 http://nb.ifeng.com/a/20180419/6515562_0.shtml
在js函数中,有一个特殊的对象this,this引用的就是函数执行的环境对象,当在全局作用域中的时候,this指向的对象就是window;这里getName函数的作用域是window,当我们直接调用该函数的时候,this指向的是window对象,所以this.name就成了window.name;而这里我们将getName函数赋给对象obj时,this引用的是obj对象,此时this.name会转换成obj.name;所以打印出来是“Jack”。函数对象也有自己的属性,如caller属性,该属性保存着调用当前函数的函数的引用,如果是在全局作用域中调用的函数,那它的值为null;当我们调用test()函数的时候,test函数中调用了add函数,此时add函数中的add.caller就指向了test函数,所以这里会把test函数的源码打印出来。这里为了代码更便于维护,我们还可以使用之前我们学的arguments.callee.caller代替add.caller,效果是一样的。不过,在严格模式(strictmode)下,arguments.callee会导致错误;arguments还有另一个属性caller,不过在严格模式下也会报错,非严格模式下返回undefind。一般这两个属性很少使用。大家都知道,函数是对象,所以每个函数都有自己的属性和方法,例如length和prototype属性,length属性表示函数接收的命名参数的个数;其中,最让人难以理解的要数prototype属性了,它保存了所有对象的实例方法和属性。当我们创建引用类型以及实现继承的时候,prototype属性是最为关键的,该属性不可枚举,不能使用forin循环遍历;由于prototype会牵扯到js中对象高级的应用,所以我们这里就不再讨论,以后会出相关的教程。除了这两个属性为,函数还有两个常用的方法:apply()和call();它们实质上用法是一样的,只是各自传递的参数不同,都是在特定的作用域中调用函数然后改变this的指向;apply()方法接收两个参数,一个是在其中运行函数的作用域,另一个是数组,而call()和apply()唯一不同的就是第二参数,它不是一个数组,而是把多个值逐一列出来:call()的用法:这里我们注意到,它们的返回值其实都是一样的,至于在工作中使用哪一个,根据代码自身情况来定吧。以上就是我对js中函数的部分总结,如果这篇文章对你有帮助,欢迎转载,评论区留言。


转载请注明:http://www.aierlanlan.com/grrz/9208.html

  • 上一篇文章:
  •   
  • 下一篇文章: