Javascript之Function

本文详细探讨了JavaScript中的Function,包括函数声明与表达式,如函数声明、函数赋值表达式和命名函数赋值表达式。接着讲解了函数的调用方式,如方法调用、函数调用、构造函数调用和Apply调用模式。此外,还介绍了Function对象的属性如prototype、arguments和length,以及非标准属性。文章还讨论了Function的方法,如bind、apply和call,以及闭包的概念、作用域链和实际应用。最后,提到了非标准方法和JavaScript中Function的其他重要概念。
摘要由CSDN通过智能技术生成

Function

函数包含一组语句,它们是JavaScript的基础模块单元,用于代码的复用、信息隐藏和组合调用。函数用于指定对象的行为。一般来说,所谓编程,就是将一组需求分解成函数与数据结构的技能。

JavaScript中函数被作为“一等公民”,函数也属于对象,不同的是只有函数可以被调用。

函数声明与表达式

函数声明

function foo() {
   }

上面的方法会在执行前被 解析(hoisted),因此它存在于当前上下文的任意一个地方, 即使在函数定义体的上面被调用也是对的。

foo(); // 正常运行,因为foo在代码运行前已经被创建
function foo() {
   }

函数赋值表达式

var foo = function() {
   };

这个例子把一个匿名的函数赋值给变量 foo。

foo; // 'undefined'
foo(); // 出错:TypeError
var foo = function() {
   };

由于 var 定义了一个声明语句,对变量 foo 的解析是在代码运行之前,因此 foo 变量在代码运行时已经被定义过了。

但是由于赋值语句只在运行时执行,因此在相应代码执行之前, foo 的值缺省为 undefined

命名函数的赋值表达式

另外一个特殊的情况是将命名函数赋值给一个变量。

var foo = function bar() {
   
    bar(); // 正常运行
}
bar(); // 出错:ReferenceError

bar 函数声明外是不可见的,这是因为我们已经把函数赋值给了 foo; 然而在 bar 内部依然可见。这是由于 JavaScript 的 命名处理 所致, 函数名在函数内总是可见的。[注意]:在IE8及IE8以下版本浏览器bar在外部也是可见的,是因为浏览器对命名函数赋值表达式进行了错误的解析, 解析成两个函数 foo 和 bar.

函数的调用

调用一个函数会暂停当前函数的执行,传递控制权和参数给新的函数。除了声明时定义的形式参数外,还传递两个隐式的参数:this和arguments.this的值取决于调用模式(方法调用,函数调用,构造函数调用,apply调用)。当实际参数和形式参数不匹配时不会报错,如果实际参数大于形式参数,多的值会忽略。如果实际参数小于形式参数,多的形式参数会设undefine.

方法调用

var Obj = {
    value: 0,
    increment: function(inc){
   
        this.value += typeof inc === "number" ? inc : 1; 
    }
};
Obj.increment();  // 1
Obj.increment(2); //3

方法可以使用this访问自己所属的对象,所以它能从对象中取值和对对象进行修改,this到对象的绑定发生在调用的时候。

函数调用

//给Obj加一个double方法
Obj.double = function(){
   
    var add = function(){
   
        var val = this.value;
        if(typeof val === "number"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值