js学习笔记-函数调用
来源:互联网 发布:北森职业测评软件 编辑:程序博客网 时间:2024/06/14 10:56
js函数
在JavaScript中函数就是对象。对象是“名/值”对的集合并拥有一个连到原型对象的隐藏链接。
对象字面量产生的对象连接到Object.prototype
。函数对象链接到Function.prototype
,Function.prototype
本身仍链接到Object.prototype
。
每个函数在创建时附有两个附件的隐藏属性:函数的上下文(this)和实现函数行为的代码。
因为函数是对象,所以他们可以像任何其他的值一样被使用。函数可以存放在变量、对象和数组中。函数可以被当做参数传递给其他函数,函数也可以在返回函数。而且,因为函数是对象,所以函数可以拥有方法。
函数的与众不同之处在于他们可以被调用。
函数调用
调用一个函数将暂停当前函数的执行,传递控制权和参数给新的函数。
在JS中一共有四种调用模式:方法调用、函数调用、构造器调用和apply调用。
这些模式的不同在于初始化this上的差异
- 方法调用
当一个函数被保存为一个对象的属性时,称为一个方法。当一个方法被调用时,this绑定到该对象上。并且可以取到该对象的上下文中的方法和属性。
- 函数调用
当一个函数并非一个对象的属性时,那么他被当做一个函数来调用:
var sum = add(3, 4)
当函数以此模式调用时,this被绑定到全局对象上。这是语言设计上的一个错误。
- 构造器调用
构造器函数存在一个严重的危害,如果在调用时忘记了在前面加上new,那么this将不会绑定到一个新对象上,this将会绑定到全局对象上,所以不但没有扩充新对象,反而将破坏全局变量。而且既没有编译警告,也没有运行警告。
如何将函数科里化??
Function.prototype.curry = function(){ var slice = Array.prototype.slice, args = slice.apply(arguments), //为了将arguments 转为数组 that = this; //指代执行curry的函数对象 return function() { return that.apply(null, args.concat(slice.apply(arguments))); };};
如何使用上面函数?
var add = function(a, b){return a+b;}var add1 = add.curry(1);add1(2);//3
注意:上述科里化的过程只能科里化一次,如果一个函数有多个参数,结果可能是先将n-m个函数传给curry,然后用最后m个参数来调用curry后的结果。而不像lodash的curry,能够每次都返回一个函数。建议使用现有库,如lodash
- js学习笔记-函数调用
- js学习笔记:函数
- 【Python学习笔记】调用函数
- js 函数的参数、调用 代码笔记
- 【js学习笔记-046】-- 函数
- js学习笔记-函数表达式
- JS构造函数学习笔记
- js构造函数学习笔记
- js--函数(学习笔记)
- JS学习笔记之函数
- v8学习---c++调用js构造函数
- node.js学习之调用函数
- JS学习-函数的定义和调用
- Node.js学习笔记_模块调用
- JS学习函数小TIP学习笔记
- 学习笔记:js里调用函数时,函数名带括号与不带括号的区别
- 关于函数调用约定的学习笔记
- C++学习笔记:重载 函数调用符()
- Curl 命令详解
- 2016.8.9 图片提示练习
- 数组中堆栈和引用类型的问题
- 输入验证
- Android仿QQ左滑删除置顶ListView
- js学习笔记-函数调用
- php+jquery+ajax简单Ajax调用示例
- hiberfil.sys的问题及解决方法之微软官方版
- 前端模块化开发的价值
- SNAT、DNAT、MASQUERADE的区别
- EventBus阅读源码(2)-SubscriberMethod
- UVa 1330 LA 3029
- HDU 1730 Northcott Game(Nim博弈变形)
- toj 4609 Internal Rate of Return