实现功能的函数()

重写后的标题为:实现功能的函数()

函数是代码语句的容器,可以使用括号 () 运算符调用。调用时可以在括号内传递参数,以便函数调用时函数中的语句可以访问某些值。

在以下代码中,我们使用 new 运算符创建 addNumbers 函数 objectone 的两个版本,另一个版本使用更常见的文字模式。两者都需要两个参数。在每种情况下,我们都调用该函数,并在括号中传递参数 () 运算符。

示例:sample76.html

var addNumbersA = new Function('num1', 'num2', 'return num1 + num2');console.log(addNumbersA(2, 2)); // Logs 4.// Could also be written the literal way, which is much more common.var addNumbersB = function (num1, num2) { return num1 + num2; };console.log(addNumbersB(2, 2)); // Logs 4.

函数可用于返回值、构造对象或作为简单运行代码的机制。 JavaScript 对函数有多种用途,但就其最基本的形式而言,函数只是可执行语句的唯一范围。

函数() 参数

Function() 构造函数采用无限数量的参数,但 Function() 构造函数期望的最后一个参数是一个字符串,其中包含构成函数体的语句。在最后一个之前传递给构造函数的任何参数都可用于正在创建的函数。还可以以逗号分隔的字符串形式发送多个参数。

在下面的代码中,我将 Function() 构造函数的用法与实例化函数对象的更常见模式进行了对比。

示例:sample77.html

var addFunction = new Function('num1', 'num2', 'return num1 + num2');/* Alternately, a single comma-separated string with arguments can be the first parameter of the constructor, with the function body following. */var timesFunction = new Function('num1,num2', 'return num1 * num2');console.log(addFunction(2, 2), timesFunction(2, 2)); // Logs '4 4'// Versus the more common patterns for instantiating a function:var addFunction = function (num1, num2) { return num1 + num2; }; // Expression form.function addFunction(num1, num2) { return num1 + num2; } // Statement form.

不建议或通常不直接利用 Function() 构造函数,因为 JavaScript 将使用 eval() 来解析包含函数逻辑的字符串。许多人认为 eval() 是不必要的开销。如果使用它,则代码设计中很可能存在缺陷。

使用 Function() 构造函数而不使用 new 关键字与仅使用构造函数创建函数对象具有相同的效果(new Function('x','return x')函数(('x','返回x'))。

直接调用 Function() 构造函数时不会创建闭包。

Function() 属性和方法

函数对象具有以下属性(不包括继承的属性和方法):

属性(Function.prototype;):

原型

函数对象实例属性和方法

函数对象实例具有以下属性和方法(不包括继承的属性和方法):

实例属性 (var myFunction = function(x, y, z) {}; myFunction.length;):

参数构造函数长度

实例方法 (var myFunction = function(x, y, z) {}; myFunction.toString();):

apply()call()toString()

函数总是返回一个值

虽然可以创建一个函数来简单地执行代码语句,但函数返回一个值也很常见。在以下示例中,我们从 sayHi 函数返回一个字符串。

示例:sample78.html

var sayHi = function () {return 'Hi';};console.log(sayHi()); // Logs "Hi".

如果函数没有指定返回值,则返回 undefined。在以下示例中,我们调用 yelp 函数,该函数将字符串“yelp”记录到控制台,而不显式返回值。

示例:sample79.html

var yelp = function () {console.log('I am yelping!');// Functions return undefined even if we don't.}/* Logs true because a value is always returned, even if we don't specifically return one. */console.log(yelp() === undefined);

这里要记住的概念是,即使您没有显式提供要返回的值,所有函数都会返回一个值。如果不指定返回值,则返回值为 undefined

函数是一等公民(不仅仅是语法,还有值)

在 JavaScript 中,函数就是对象。这意味着函数可以存储在变量、数组或对象中。此外,函数可以传递给函数或从函数返回。函数具有属性,因为它是一个对象。所有这些因素使得函数成为 JavaScript 中的一等公民。

示例:sample80.html

// Functions can be stored in variables (funcA), arrays (funcB), and objects (funcC).var funcA = function () { }; // Called like so: funcA()var funcB = [function () { } ]; // Called like so: funcB[0]()var funcC = { method: function () { } }; // too.method() or funcC['method']()// Functions can be sent to and sent back from functions.var funcD = function (func) {return func};var runFuncPassedToFuncD = funcD(function () { console.log('Hi'); });runFuncPassedToFuncD();// Functions are objects, which means they can have properties.var funcE = function () { };funcE.answer = 'yup'; // Instance property.console.log(funcE.answer); // Logs 'yup'.

认识到函数是一个对象,因此也是一个值,这一点至关重要。它可以像 JavaScript 中的任何其他表达式一样传递或增强。

将参数传递给函数

参数是在调用函数时将值传递到函数作用域的工具。在下面的示例中,我们调用 addFunction()。由于我们已预定义它采用两个参数,因此在其范围内可以使用两个附加值。

示例:sample81.html

var addFunction = function (number1, number2) {var sum = number1 + number2;return sum;}console.log(addFunction(3, 3)); // Logs 6.

与其他一些编程语言相比,在 JavaScript 中省略参数是完全合法的,即使函数已被定义为接受这些参数。缺少的参数仅被赋予值 undefined。当然,如果省略参数值,该函数可能无法正常工作。

如果向函数传递意外参数(创建函数时未定义的参数),则不会发生错误。并且可以从 arguments 对象访问这些参数,该对象可用于所有函数。

thisarguments 值可用于所有函数

在所有函数的范围和主体内,thisarguments 值可用。

arguments 对象是一个类似数组的对象,包含传递给函数的所有参数。在下面的代码中,即使我们在定义函数时放弃指定参数,我们也可以依赖传递给函数的 arguments 数组来访问在调用时发送的参数。

示例:sample82.html

var add = function () {return arguments[0] + arguments[1];};console.log(add(4, 4)); // Returns 8.

this 关键字,传递给所有函数,是对包含该函数的对象的引用。正如您所期望的,对象中包含的作为属性(方法)的函数可以使用 this 来获取对父对象的引用。当函数定义在全局作用域时,this 的值为全局对象。查看以下代码并确保您了解 this 返回的内容。

示例:sample83.html

var myObject1 = {name: 'myObject1',myMethod: function () { console.log(this); }};myObject1.myMethod(); // Logs 'myObject1'.var myObject2 = function () { console.log(this); };myObject2(); // Logs window.

arguments.callee 属性

arguments 对象有一个名为 callee 的属性,它是对当前正在执行的函数的引用。此属性可用于从函数范围内引用该函数 (arguments.callee)a 自引用。在下面的代码中,我们使用此属性来获取对调用函数的引用。

示例:sample84.html

var foo = function foo() {console.log(arguments.callee); // Logs foo()// callee could be used to invoke recursively the foo function (arguments.callee())} ();

当需要递归调用函数时,这非常有用。

函数实例 length 属性和 arguments.length

arguments 对象具有唯一的 length 属性。虽然您可能认为这个 length 属性将为您提供已定义参数的数量,但它实际上提供了在调用期间发送到函数的参数数量。

示例:sample85.html

var myFunction = function (z, s, d) {return arguments.length;};console.log(myFunction()); // Logs 0 because no parameters were passed to the function.

使用所有 Function() 实例的 length 属性,我们实际上可以获取函数期望的参数总数。

腾讯智影-AI数字人 腾讯智影-AI数字人

基于AI数字人能力,实现7*24小时AI数字人直播带货,低成本实现直播业务快速增增,全天智能在线直播

腾讯智影-AI数字人 73 查看详情 腾讯智影-AI数字人

示例:sample86.html

var myFunction = function (z, s, d, e, r, m, q) {return myFunction.length;};console.log(myFunction()); // Logs 7.

arguments.length 属性在 JavaScript 1.4 中已弃用,但可以从函数对象的 length 属性访问发送到函数的参数数量。接下来,您可以通过利用 callee 属性来首先获取对正在调用的函数的引用 (arguments.callee.length) 来获取长度值。

重新定义函数参数

函数参数可以直接在函数内部重新定义,也可以使用 arguments 数组。看一下这段代码:

示例:sample87.html

var foo = false;var bar = false;var myFunction = function (foo, bar) {arguments[0] = true;bar = true;console.log(arguments[0], bar); // Logs true true.}myFunction();

请注意,我可以使用 arguments 索引或直接为参数重新分配新值来重新定义 bar 参数的值。

在函数完成之前返回函数(取消函数执行)

通过使用带或不带值的 return 关键字,可以在调用期间随时取消函数。在下面的示例中,如果参数未定义或不是数字,我们将取消 add 函数。

示例:sample88.html

var add = function (x, y) {// If the parameters are not numbers, return error.if (typeof x !== 'number' || typeof y !== 'number') { return 'pass in numbers'; }return x + y;}console.log(add(3, 3)); // Logs 6.console.log(add('2', '2')); // Logs 'pass in numbers'.

这里要讲的概念是,您可以在函数执行过程中的任何时刻使用 return 关键字来取消函数的执行。

定义函数(语句、表达式或构造函数)

函数可以用三种不同的方式定义:函数构造函数、函数语句或函数表达式。在下面的示例中,我演示了每种变体。

示例:sample89.html

/* Function constructor: The last parameter is the function logic, everything before it is a parameter. */var addConstructor = new Function('x', 'y', 'return x + y');// Function statement.function addStatement(x, y) {return x + y;}// Function expression.var addExpression = function (x, y) {return x + y;};console.log(addConstructor(2, 2), addStatement(2, 2), addExpression(2, 2)); // Logs '4 4 4'.

有人说函数还有第四种类型的定义,称为“命名函数表达式”。命名函数表达式只是一个包含名称的函数表达式(例如, var add = function add(x, y) {return x+y})。

调用函数(函数、方法、构造函数或 call()apply())

使用四种不同的场景或模式调用函数。

作为函数作为一种方法作为构造函数使用 apply()call()

在下面的示例中,我们将检查每种调用模式。

示例:sample90.html

// Function pattern.var myFunction = function () { return 'foo' };console.log(myFunction()); // Logs 'foo'.// Method pattern.var myObject = { myFunction: function () { return 'bar'; } }console.log(myObject.myFunction()); // Logs 'bar'.// Constructor pattern.var Cody = function () {this.living = true;this.age = 33;this.gender = 'male';this.getGender = function () { return this.gender; };}var cody = new Cody(); // Invoke via the Cody constructor.console.log(cody); // Logs the cody object and properties.// apply() and call() pattern.var greet = {runGreet: function () {console.log(this.name, arguments[0], arguments[1]);}}var cody = { name: 'cody' };var lisa = { name: 'lisa' };// Invoke the runGreet function as if it were inside of the cody object.greet.runGreet.call(cody, 'foo', 'bar'); // Logs 'cody foo bar'.// Invoke the runGreet function as if it were inside of the lisa object.greet.runGreet.apply(lisa, ['foo', 'bar']); // Logs 'lisa foo bar'./* Notice the difference between call() and apply() in how parameters are sent to the function being invoked. */

确保您了解所有四种调用模式,因为您将遇到的代码可能包含其中任何一种。

匿名函数

匿名函数是没有给出标识符的函数。匿名函数主要用于将函数作为参数传递给另一个函数。

示例:sample91.html

// function(){console.log('hi');}; // Anonymous function, but no way to invoke it.// Create a function that can invoke our anonymous function.var sayHi = function (f) {f(); // Invoke the anonymous function.}// Pass an anonymous function as a parameter.sayHi(function () { console.log('hi'); }); // Logs 'hi'.

自调用函数表达式

函数表达式(实际上是除从 Function() 构造函数创建的函数之外的任何函数)可以在定义后使用括号运算符立即调用。在以下示例中,我们创建 sayWord() 函数表达式,然后立即调用该函数。这被认为是一个自调用函数。

示例:sample92.html

var sayWord = function () { console.log('Word 2 yo mo!'); } (); // Logs 'Word 2 yo mo!'

自调用匿名函数语句

可以创建自调用的匿名函数语句。这称为自调用匿名函数。在下面的示例中,我们创建了几个立即调用的匿名函数。

示例:sample93.html

// Most commonly used/seen in the wild.(function (msg) {console.log(msg);})('Hi');// Slightly different, but achieving the same thing:(function (msg) {console.log(msg)} ('Hi'));// The shortest possible solution.!function sayHi(msg) { console.log(msg); } ('Hi');// FYI, this does NOT work!// function sayHi() {console.log('hi');}();

根据 ECMAScript 标准,如果要立即调用函数,则需要在函数两边加上括号(或将函数转换为表达式的任何内容)。

函数可以嵌套

函数可以无限期地嵌套在其他函数中。在下面的代码示例中,我们将 goo 函数封装在 bar 函数内部,该函数位于 foo 函数内部。

示例:sample94.html

var foo = function () {var bar = function () {var goo = function () {console.log(this); // Logs reference to head window object.} ();} ();} ();

这里的简单概念是函数可以嵌套,并且嵌套的深度没有限制。

请记住,嵌套函数的 this 的值将是 JavaScript 1.5、ECMA-262 第 3 版中的头对象(Web 浏览器中的 window 对象)。

将函数传递给函数以及从函数返回函数

如前所述,函数是 JavaScript 中的一等公民。由于函数是一个值,并且函数可以传递任何类型的值,因此函数可以传递给函数。接受和/或返回其他函数的函数有时称为“高阶函数”。

在下面的代码中,我们将一个匿名函数传递给 foo 函数,然后立即从 foo 函数返回。变量 bar 所指向的正是这个匿名函数,因为 foo 接受并返回匿名函数。

示例:sample95.html

// Functions can be sent to, and sent back from, functions.var foo = function (f) {return f;}var bar = foo(function () { console.log('Hi'); });bar(); // Logs 'Hi'.

因此,当调用 bar 时,它会调用传递给 foo() 函数的匿名函数,然后从 foo() 函数传回并从 bar 引用多变的。所有这些都是为了展示函数可以像任何其他值一样传递的事实。

在定义函数语句之前调用函数语句(又名函数提升)

函数语句可以在执行期间在其实际定义之前调用。这有点奇怪,但您应该意识到这一点,以便您可以利用它,或者至少知道当您遇到它时会发生什么。在下面的示例中,我在定义 sayYo()sum() 函数语句之前调用它们。

示例:sample96.html

// Example 1var speak = function () {sayYo(); // sayYo() has not been defined yet, but it can still be invoked, logs 'yo'.function sayYo() { console.log('Yo'); }} (); // Invoke// Example 2console.log(sum(2, 2)); // Invoke sum(), which is not defined yet, but can still be invoked.function sum(x, y) { return x + y; }

发生这种情况是因为在代码运行之前,函数语句被解释并添加到执行堆栈/上下文中。确保您在使用函数语句时意识到这一点。

定义为函数表达式的函数不会被提升。仅提升函数语句。

函数可以调用自身(又名递归)

函数调用自身是完全合法的。事实上,这经常被用在众所周知的编码模式中。在下面的代码中,我们启动 countDownFrom 函数,然后该函数通过函数名称 countDownFrom 调用自身。本质上,这会创建一个从 5 倒数到 0 的循环。

示例:sample97.html

var countDownFrom = function countDownFrom(num) {console.log(num);num--; // Change the parameter value.if (num < 0) { return false; } // If num < 0 return function with no recursion.// Could have also done arguments.callee(num) if it was an anonymous function.countDownFrom(num);};countDownFrom(5); // Kick off the function, which logs separately 5, 4, 3, 2, 1, 0.

您应该意识到,函数调用自身(也称为递归)或重复执行此操作是很自然的。

结论

函数是 JavaScript 最常用的方面之一,希望您现在对如何使用它们有了更好的了解。

以上就是实现功能的函数()的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/532492.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月9日 11:18:47
下一篇 2025年11月9日 11:19:55

相关推荐

  • PHP 函数怎么处理表格数据

    php 提供了以下函数处理表格数据:table():将二维数组转换为 html 表格。tbodies():将二维数组转换为 html 表格主体。tfoot():将二维数组转换为 html 表格脚注。thead():将二维数组转换为 html 表格表头。 PHP 函数详解:处理表格数据 PHP 中提供…

    2025年12月9日
    000
  • 如何使用 PHP 函数扩展进行数据处理?

    要使用 php 函数扩展进行数据处理,需要进行以下步骤:安装扩展库文件、添加到 php.ini 中并加载扩展(extension_load() 函数)。使用扩展中的函数(例如 my_custom_function())。实战案例:使用 csv 扩展处理 csv 文件。 如何使用 PHP 函数扩展进行…

    2025年12月9日
    000
  • 如何通过Webman进行网站的表单验证和数据处理

    如何通过Webman进行网站的表单验证和数据处理 Webman是一个功能强大的Web开发框架,它提供了丰富的功能和工具,可以帮助开发人员快速构建高质量的Web应用程序。在实际的Web开发过程中,表单验证和数据处理是非常重要的一部分。本文将介绍如何使用Webman进行网站的表单验证和数据处理,并提供相…

    2025年12月5日
    400
  • WebMan技术在在线商务平台中的应用与优化

    WebMan技术在在线商务平台中的应用与优化 引言:随着互联网的发展,越来越多的商务活动转移到了在线平台上。在线商务平台具有全天候、跨地域的优势,为商家和消费者提供了更广阔的市场和更方便的交易方式。而在这个过程中,WebMan技术发挥着重要的作用。本文将介绍WebMan技术在在线商务平台中的应用,并…

    2025年12月4日
    000
  • Go语言和MySQL数据库:如何有效处理海量数据?

    近年来,大数据和云计算的兴起,推动了海量数据的处理需求。因此,对于开发者来说,如何提高程序处理海量数据的能力显得尤为重要。在这方面,go语言和mysql数据库可以提供一些有效的解决方案。 Go语言是一种由Google公司开发的静态类型、编译型的编程语言。Go语言简单易学,语法清晰,同时具有高效的并发…

    数据库 2025年11月30日
    000
  • MySQL和Oracle:对于大规模数据处理的适应能力

    mysql和oracle:对于大规模数据处理的适应能力 概述:在当今互联网时代,大规模数据处理已经成为企业和组织的必备能力。作为两个最受欢迎和广泛应用的关系数据库管理系统(RDMS),MySQL和Oracle都在这个领域占据着重要的地位。本文将重点讨论MySQL和Oracle在大规模数据处理方面的适…

    数据库 2025年11月27日
    400
  • Java函数式接口在数据处理中的应用

    函数式接口在数据处理中的应用什么是函数式接口?函数式接口只包含一个抽象方法的接口。数据处理中的应用:数据过滤:使用 filter() 方法仅保留满足条件的元素。数据映射:使用 map() 方法将每个元素转换为另一个类型。数据分组:使用 groupingby() 方法按键将数据分组到 map 中。数据…

    2025年11月27日 java
    000
  • php表单怎么用_PHP表单设计、提交与数据处理方法

    首先创建HTML表单并设置action和method属性,接着在PHP中通过$_POST或$_GET接收数据,然后使用trim、htmlspecialchars和filter_var等函数验证过滤输入,再将合法数据存入数据库或文件,最后用header()重定向防止重复提交。 如果您在开发网页时需要收…

    2025年11月26日 后端开发
    100
  • 怎样让豆包AI写Python数据处理程序 5个技巧让豆包AI帮你搞定数据清洗与分析

    使用豆包ai写python数据处理程序的关键在于提问技巧。1. 明确数据格式,如csv或excel,并说明字段和缺失值情况;2. 给出具体任务目标,如按月份汇总销售额或去重订单号;3. 指定使用pandas库并提示常用方法,如read_csv和groupby;4. 要求写出完整代码并检查依赖项,如i…

    2025年11月25日 科技
    100
  • GDM在Linux系统中扮演的角色及重要性

    GDM在Linux系统中扮演的角色及重要性 GDM(Gnome Display Manager)是Linux系统中一个重要的组件,主要负责管理用户登录和注销过程,以及提供用户界面的显示和交互功能。本文将详细介绍GDM在Linux系统中的角色及其重要性,并提供具体的代码示例。 一、GDM在Linux系…

    2025年11月25日 运维
    000
  • JavaScript响应式用户界面

    JavaScript通过监听resize事件实现响应式界面,结合HTML与CSS动态调整布局,确保内容适配不同屏幕尺寸与用户交互。 要实现一个响应式用户界面,JavaScript 起到关键作用,但必须与 HTML 结构和 CSS 媒体查询协同工作。核心在于让页面内容能根据设备屏幕尺寸、方向或用户交互…

    2025年11月24日 web前端
    100
  • 实用技巧:利用Oracle DECODE函数简化数据处理操作

    在Oracle数据库中,有一种非常实用的函数叫做DECODE函数,它可以帮助简化%ignore_a_1%操作,让SQL查询变得更加高效。DECODE函数通常用于根据不同条件返回不同结果,类似于其他编程语言中的条件判断语句。在本文中,我们将结合具体的代码示例来介绍如何使用DECODE函数,并展示其强大…

    2025年11月16日
    000
  • “天河”超算夺得世界图计算领域桂冠

    ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 1. 由国防科技大学研制的“天河”新一代超级计算机系统日前在国际Graph500排名中夺得Big Data Green Graph500榜单世界第一的佳绩。 2. Graph500排行榜是一项评…

    2025年11月11日 科技
    100
  • 如何利用 PHP 函数高效处理数据?

    如何利用 PHP 函数高效处理数据 PHP 提供了强大的函数库,可以高效处理各种数据类型。了解这些函数将极大地简化您的代码并提高其性能。 数组处理函数 array_map():将回调函数作用于数组中的每个元素,并返回一个包含结果数组。array_filter():过滤数组,仅保留符合回调函数的元素。…

    2025年11月10日 后端开发
    100
  • PHP框架在数据处理方面的能力与其他框架的对比

    php 框架在数据处理方面的能力比较:laravel:提供了 eloquent orm、query builder 和数据库迁移工具。symfony:拥有 doctrine orm、form framework 和 validator 组件。codeigniter 4:提供了 active reco…

    2025年11月9日 后端开发
    000
  • 前端开发中的JavaScript异步请求与数据处理经验总结

    前端开发中的JavaScript异步请求与数据处理经验总结 在前端开发中,JavaScript是一门非常重要的语言,它不仅可以实现页面的交互和动态效果,还可以通过异步请求获取和处理数据。在这篇文章中,我将总结一些在处理异步请求和数据时的经验和技巧。 一、使用XMLHttpRequest对象进行异步请…

    2025年11月9日 web前端
    000
  • 使用JavaScript函数实现用户界面的动态效果

    使用JavaScript函数实现用户界面的动态效果 在现代Web开发中,JavaScript是一种非常常用的编程语言,它能为网页添加动态效果,提升用户体验。本文将介绍如何使用JavaScript函数来实现用户界面的动态效果,并提供具体的代码示例。 显示/隐藏元素在许多情况下,我们希望能够根据用户的操…

    2025年11月9日 web前端
    100
  • 如何使用流优化 Java 函数处理数据性能?

    如何在 java 函数中使用流式处理优化数据处理性能?识别数据源:确定数据可否表示为数据流。构建函数:使用 stream api 创建流并逐条处理数据。应用操作:使用 stream api 进行过滤、映射、排序或聚合。输出目的地:将结果写入存储或下游服务。 如何在 Java 函数中使用流式处理优化数…

    2025年11月8日 java
    000
  • Java 中函数式编程的数据处理策略

    java 函数式编程采用不可变性和纯函数原则,提供 stream、lambda 表达式和方法引用等 api,支持以下数据处理操作:转换操作:通过 map、filter、sorted 等方法遍历元素生成新 stream。终端操作:通过 findfirst、sum、foreach 等方法处理所有元素并返…

    2025年11月8日 java
    100
  • Java函数式编程在自然语言处理数据处理中的高级语义理解

    自然语言处理中的高级语义理解需要深入了解文本数据的含义。java 函数式编程提供以下功能:不可变性、纯函数和一等公民函数,这些功能通过流式处理和 lambda 表达式赋予代码可读性、并发性和灵活性。运用这些功能,我们可以轻松提取关键信息并执行高级语义分析,从而提升 nlp 数据处理中的语义理解能力。…

    2025年11月8日 java
    000

发表回复

登录后才能评论
关注微信