JavaScript 函数
发布时间:2023-02-16 14:17:19 所属栏目:Java 来源:互联网
导读:在 JavaScript中,函数是头等 (first-class) 对象,因为它们可以像任何其他对象一样具有属性和方法。它们与其他对象的区别在于函数可以被调用。简而言之,它们是 Function 对象。(MDN) 函数就是一段代码片段,调用函数就是执行函数中的代码。 1. 函数的使用
具体原因可以查看执行上下文章节。 4.2 函数作用域 函数有他自己的作用域,函数内声明的变量等通常情况下不能被外部访问,但是函数可以访问到外部的变量或者其他函数等 var a = ; function fn() { var b = ; console.log(a); // 输出:1 console.log(b); // 输出:2 } fn(); console.log(b); // ReferenceError: b is not defined 执行以上代码会报 b is not defined 错误。 4.3 匿名函数 没有名字的函数就是一个匿名函数 var fn = function() { console.log('我是一个匿名函数'); }; 除了在函数表达式中会出现匿名函数,还有许多场景。 相对常见的一个就是自执行匿名函数,MDN官方翻译为立即调用函数表达式。 自执行就是这个函数声明后就会立即执行,自执行的匿名函数通常会被用来形成独立的作用域。 如: (function() { var num = ; alert(num); })(); 这是一个自执行的匿名函数,这个匿名函数是被包裹了一段括号后才被调用的。 以下这段代码会报错: // 报错 function() { var num = ; alert(num); }(); 浏览器会告诉你必须给函数一个名字。 通过括号包裹一段函数,让js引擎识别成他是一个函数表达式,再对他进行执行,就不会报错,这是加括号的原因。 同理,可以使用 +,! 等运算符代替括号,让一个匿名函数成为一个函数表达式即可。 大部分第三方框架都会通过一个自执行的匿名函数包裹代码,与浏览器全局环境隔离,避免污染到全局环境。 4.4 具有函数名的函数表达式 函数表达式进行声明的时候也可以使用具名函数 var count = function fn(num) { console.log('我是一个函数'); }; 以上这段代码是不会报错的,但是不能通过 fn 访问到函数,这里的 fn 只能在函数内部进行访问,通常在使用递归的形式做计算的时候会用到这种写法。 var count = function fn(num) { if (num < ) { return num; } return fn(num - ) + num; } count(); 上面这个例子,就是在函数内部访问 fn 调用自己,使用递归的形式求和。 注:递归相关的知识可以参考相关文献进行学习 4.5 arguments arguments 是一个对应于传递给函数的参数的类数组对象。(MDN) 通常情况下函数都具有 arguments 对象,可以在函数内部直接访问到。 他是一个类数组,即长得很像数组,成员都是用数字编号,同时具有 length 属性。 arguments 中存放着当前函数被调用时,传递过来的所有参数,即便不声明参数,也可以通过 arguments 取到传递过来的参数。 function sum() { console.log(arguments); } sum(, , , ); 执行上述代码,可以看到在控制台输出了一个对象,存放的就是所有传递过去的参数,利用这一特性,就可以不限制参数个数,或者让函数做中转站(拦截函数),利用 arguments 将参数传递给另一个函数。 如,一个不确定用户输入的参数个数的求和函数: function sum() { var total = ; var i; var len; for (i = , len = arguments.length; i < len; i++) { total += arguments[i]; } return total; } var total = sum(, , , , ); console.log(total); // 输出:25 通过循环遍历 arguments 对象,就可以得到所有参数,然后做累加就可以达到求和的目的。 (编辑:莱芜站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |