JavaScript 函数定义、调用方式与注意事项详解

作者:代码拾荒

时间:2026-10-22

浏览:168

本文详细解析JavaScript中函数的两种定义方式:函数声明与函数表达式,重点阐述函数命名规范、返回值机制及嵌套函数的作用域限制。深入探讨函数作为普通函数、方法、构造函数及间接调用(call/apply)四种调用场景下的this指向差异,特别是严格模式与非严格模式对调用上下文的影响,以及构造函数中new关键字的行为逻辑。

文章目录

JavaScript 函数定义基础

函数定义

函数声明方式


function(a,b){
 return a+b; 
}

表达式定义方式


var add = function(a,b){return a+b};

//函数表达式可以包含名称,这在递归时很有用 var f = function fact(x){ if(x<=1) {return 1; }else { return x*fact(x-1); } }

以表达式方式定义的函数,其名称是可选的。若函数定义表达式中包含了名称,该名称将作为局部变量绑定到函数内部的局部作用域中,即函数的名称实际上成为了函数内部的一个局部变量。

函数命名规范

1. like_this():首字符为小写,若包含多个单词,单词之间以下划线分隔。

2. likeThis():首字符为小写,若包含多个单词,除第一个单词外,其余单词的首字母使用大写字母(驼峰命名法)。

3. 内部函数或私有函数,通常以一条下划线为前缀。

注意:函数声明语句会被提升到外部脚本或外部函数作用域的顶部,因此可以在其定义之前被代码调用。

以表达式方式定义的函数,必须先将其赋值给一个变量。因此,在定义之前无法调用该表达式方式定义的函数。

函数返回值

  • return语句用于将函数的值返回给调用者。
  • 若函数中没有return语句,则默认返回undefined。

函数返回值与嵌套函数

嵌套函数

  • 嵌套函数可以访问其外层函数的参数和变量。
  • 但是,嵌套函数不能出现在循环、条件判断,或者try/catch/finally/with语句中。

函数的四种调用方式

函数调用

  • 作为函数调用
  • 作为方法调用
  • 作为构造函数调用
  • 通过它们的call()和apply()方法间接调用

作为普通函数调用

作为函数调用

add(1,2)

根据ECMAScript3和非严格模式下的ECMAScript5规定,函数调用的上下文(即this的值)是全局对象。然而在严格模式下,调用上下文则是undefined。

//定义一个函数且调用一个函数来确定当前脚本运行是否为严格模式  var strict = (function(){return this;}());

作为方法调用与this指向

作为方法调用


var o = {
 m:1,
 n:2,
 add:function(){
  this.result = this.m+this.n;
  }
}

方法调用与函数调用的一个重大区别在于调用上下文。

o.add()中,add的调用上下文为o,即this。o.add()等同于o['add']()。当方法不需要返回值时,最好直接返回this以实现方法链。this是一个关键字,不是变量,也不是属性名。JavaScript语法不允许给this赋值。与变量不同,关键字this没有作用域的限制,嵌套的函数不会从调用它的函数中继承this。如果想访问外部函数的this,需将this保存在变量中(如var self = this)。如果嵌套函数作为函数调用,其this的值指向调用它的对象。如果作为普通函数调用,this在非严格模式下不是全局对象,就是在严格模式下为undefined。

作为构造函数调用

构造函数调用


var o = new Object();

构造函数调用与普通函数调用以及方法调用在实参处理、调用上下文和返回值等方面都有不同。

凡是没有形参的构造函数调用都可以省略圆括号。


var o = new Object();
var o = new Object;
//等价

构造函数调用创建一个新的空对象,该对象继承自构造函数的prototype属性。构造函数试图初始化这个新创建的对象,并将其作为上下文,因此构造函数可以使用this关键字来引用这个新创建的对象。

new o.m()调用的上下文并不是o。构造函数并不使用return。如果构造函数显式地使用return语句返回一个对象,那么调用表达式的值就是这个对象。如果构造函数没有返回值,或者返回一个原始值,那么就会忽略返回值,同时使用新对象作为返回结果。

间接调用:call与apply

间接调用

call() apply()

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章