函数内部属性

  函数内部有两个特殊的属性arguments和this。其中,arguments是类数组对象,包含传入函数中的所有值,这个arguments还有一个属性:callee,这个属性是一个指针,指向拥有arguments的函数。而this据以引用的是函数执行环境对象。

function fib(n){
if(n = 1){
return 1;
}else{
return n * arguments.callee(n - 1);
}
} //这里利用函数内arguments的callees属性降低了函数的耦合、

 

  ECMAScript 5 也规范了另一个函数属性:caller。保存着调用当前的函数的函数的引用,如果是在全局作用域则为null。

function outer(){
inner();
} function inner(){
alert(inner.caller);
} outer(); //alert函数会制动执行toString函数,这里弹出outer函数代码

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

apply()方法接受两个参数,一个是在其中运行函数的作用域,另一个是参数数组。第二个参数可以是Array()的实例,也可以是arguments对象。

function sum(num1, num2){
return num1 + num2;
} function callSum(num1, num2){
return sum.apply(this, arguments)
}
callSum(1, 2); //全局作用域中调用所以this为window。 call()方法接受两个参数,与apply区别是第二个参数,必须逐个举列出来。
function callSum(num1, num2){
return sum.call(this, num1, num2);
} callSum(10, 10); ECMAScript定义了bind方法,简历函数实例,其this值会被绑定到传给bind()函数的值,例如: var obj = {
this.color: "red"}; window.color = "green"; function sayColor(){
alert(this.color);
}; var newFunc = sayColor.bind(obj);
newFunc(); //red

Javascript高级程序设计——函数内部属性与函数属性的更多相关文章

  1. Javascript高级程序设计——this、闭包、函数表达式

    在javascript中函数声明会被提升,而函数表达式不会被提升.当函数执行时,会创建一个执行环境和相应的作用域链,然后利用arguments和其他的命名参数的值来初始化函数的活动对象,作用域链链中所 ...

  2. 【读书笔记】读《JavaScript高级程序设计-第2版》 - 函数部分

    1. 定义 函数实际上是对象,每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法.由于函数是对象,因此函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定. 对于函数 ...

  3. JavaScript高级程序设计(九):基本概念----函数

    一.参数的理解 1.ECMAScript中的参数在内部是用一个数组来表示的.函数接收到的始终是这个数组,而不关心数组中包含多少个参数,即使没有参数也可以. 2.实质上,函数可以通过arguments对 ...

  4. 《JavaScript高级程序设计》第7章 函数表达式

    定义函数的方式有两种:函数声明和函数表达式 // 函数声明 function function_name(argument) { // body... } // 函数表达式 var function_ ...

  5. (读书笔记)函数参数浅析-JavaScript高级程序设计(第3版)

    ECMAScript函数不介意传递的参数个数,因为在其内部是用一个数组进行表示的.在函数体内可以通过arguments对象来访问这个参数数组,就像我们正常访问数组一样处理. arguments对象只是 ...

  6. JavaScript高级程序设计(读书笔记)之函数表达式

    定义函数的方式有两种:一种是函数声明,另一种就是函数表达式. 函数声明的一个重要特征就是函数声明提升(function declaration hoisting),意思是在执行代码前会先读取函数声明. ...

  7. JavaScript高级程序设计--函数小记

    执行环境和作用域链   每个函数都有自己的执行环境.当执行流进入一个函数时,函数 的环境就会被推入一个环境栈中.而在函数执行之后,栈将其环境弹出,把控制权返回给之前的执行环境.   当代码在一个环境中 ...

  8. JavaScript高级 函数表达式 《JavaScript高级程序设计(第三版)》

    函数表达式的特征 使用函数实现递归 使用闭包定义私有变量 前面我们说到定义函数有两种方式:函数声明.函数表达式. 两者的区别在于函数声明提升,前者在执行之前的上下文环境中直接被赋值,而后者不会. 一. ...

  9. 阅读摘录《javascript 高级程序设计》01

    前言: 因为工作需要,所以开始主攻前台JS方面的技术.在以前的工作中,使用过这门脚本语言.但是都是比较凌乱的,用到什么学什么,只是为了实现业务,而去使用. 不会考虑到代码优化,封装对象等.今次特意借了 ...

  10. 《JavaScript高级程序设计》学习笔记(5)——面向对象编程

    欢迎关注本人的微信公众号"前端小填填",专注前端技术的基础和项目开发的学习. 本节内容对应<JavaScript高级程序设计>的第六章内容. 1.面向对象(Object ...

随机推荐

  1. VC++ 比较两个字符串是否相等,字母大小写相关。

    1.strcmp 这是用于ANSI标准字符串的函数(如string和char *),此函数接受两个字符串缓冲区做为参数,如果两个字符串是相同的则返回零.否则若第一个传入的字符串的值大于第二个字符串返回 ...

  2. C#调用c++Dll 结构体数组指针的问题

    参考文章http://blog.csdn.net/jadeflute/article/details/5684687 但是这里面第一个方案我没有测试成功,第二个方案我感觉有点复杂. 然后自己写啦一个: ...

  3. python数据类型和字符串(三)

    一.变量 变量声明变量 #!/usr/bin/env python age= gender1='male' gender2='female' 变量作用:保存状态(程序的运行本质是一系列状态的变化,变量 ...

  4. import_site

    http://kfd.me/ https://google.kfd.me/webhp?newwindow=1&safe=active http://googlebridge.com/searc ...

  5. Git / 程序员需要知道的12个Git高级命令

    众所周知,Git目前已经是分布式版本控制领域的翘楚,围绕着Git形成了完整的生态圈.学习Git,首先当然是学习Git的基本工作流.相比于SVN等传统版本控制系统来说,Git是专为分布式版本控制而生的强 ...

  6. yourphp数据库介绍

    yt_attachment 编辑器图片上传存放的表

  7. 分享一个控制JS 浏览器缓存的解决办法。

     JS 缓存的问题一直都是我们又爱又恨的东西.也是我们比较头痛的问题, 一方面为了提高网站响应速度,减少服务器的负担,和节省带宽,将需要将静态资源缓存在客户端, 但是另一方面,当js 文件有改动的时候 ...

  8. Aspect Oriented Programming using Interceptors within Castle Windsor and ABP Framework AOP

    http://www.codeproject.com/Articles/1080517/Aspect-Oriented-Programming-using-Interceptors-wit Downl ...

  9. JavaBean出现的目的

    一.JavaBean出现的目的 由于只用JSP开发会发现使用了很多的Scriptlet,会使得jsp文件非常混乱.如果使用了JavaBean,则可以大大减少JSP中代码量. JSP的理想状态是只负责显 ...

  10. 随笔 JS 字符串 分割成字符串数组 并动态添加到指定ID的DOM 里

    JS /* * 字符串 分割成字符串数组 并动态添加到指定ID的DOM 里 * @id 要插入到DOM元素的ID * * 输入值为图片URL 字符串 * */ function addImages(i ...