本文总结 JavaScript 函数的关键基础概念,深入解析 arguments 对象如何接收实参并用于动态求和,阐明全局与局部变量的作用域规则及隐式全局变量风险,介绍立即执行函数(IIFE)的语法与优势,以及函数在运行时自我重写的特性与行为。
函数是 JavaScript 中可重复使用的代码块,通常由事件触发或被显式调用时执行。本文将重点梳理 JavaScript 函数相关的基础知识及常见易错点。
arguments 对象的使用
一、函数中的 arguments 对象
每个函数内部都包含一个名为 arguments 的对象,该对象用于获取函数被调用时传入的所有参数。
需要注意的是,arguments 接收的是实际传递的参数值(实参)。
以下示例展示了如何利用 arguments 对象的特性编写一个支持任意数量参数求和的函数:
function sumOnSteroids(){
var I, res = 0;
var number_of_params = arguments.length;
for(I = 0; I < number_of_params; i++){
res += arguments[i];
}
return res;
}
变量作用域规则
二、关于变量的作用域
在 JavaScript 中,变量无法定义特定的块级作用域(如 if 或 for 块),但可以定义其所属的函数作用域。
JavaScript 中的全局变量是指声明在所有函数外部的变量。
在函数内部定义的局部变量,在函数外部是不可见的,即无法直接访问。
如果在函数内部声明变量时省略了 var 关键字,该变量会被隐式地声明为全局变量(即使定义在函数内部,外部也可访问)。这类变量在函数被调用前不存在,仅在函数执行时被创建并赋予全局作用域。
自调用函数机制
三、自调用函数(立即执行函数)
自调用函数是指在定义完成后立即自动执行的函数,其基本语法结构如下:
{
function(name){
alert(‘Hello' + name + ‘!');
}
}(‘Martin')
函数定义后的括号 () 可用于传递参数,括号内声明的值会自动传递给 function 的参数列表。
使用上述自调用匿名函数(IIFE)的一个主要优势是它不会在全局作用域中创建任何变量,从而避免污染全局命名空间。
函数自我重写特性
四、可自行重写的函数
这类函数的特点是在执行过程中可以重新定义自身,以下是一个具体示例:
function a(){
alert(“A”);
a = function(){
alert(“B”)
};
}
首次调用 a() 时,执行 alert(“A”);第二次调用 a() 时,则执行 alert(“B”)。这是因为在第一次执行该函数时,代码将全局变量 a 重新赋值为一个新的函数定义。
以上介绍了 JavaScript 函数相关的基础知识盲点,包括 arguments 对象、作用域机制、自调用及函数重写等内容,希望对读者有所帮助。