详解 arguments, callee, caller, call, apply的区别

合集下载

arguments callee 的概念

arguments callee 的概念

文章标题:深度解析arguments callee的概念1. 引言在JavaScript编程中,我们经常会遇到arguments callee这个概念,但它究竟是什么呢?本文将从浅入深,逐步深入探讨arguments callee,并共享我的个人观点和理解。

2. 初识arguments callee当我们在JavaScript函数中使用arguments对象时,常常会看到arguments callee的出现。

它其实是一个指向正在执行的函数的指针,通过它可以访问当前正在执行的函数。

在编程中,我们可以利用arguments callee来实现一些高级的技巧和功能。

3. arguments callee的应用在日常的编程实践中,arguments callee常常用于递归函数的实现。

通过arguments callee,我们可以在递归调用中动态地引用当前函数,而不需要显式地命名函数名。

这种灵活性和便利性极大地提高了代码的可读性和可维护性。

4. 深入理解arguments callee除了递归函数外,arguments callee还可以用于实现一些高阶的编程技巧,比如函数柯里化、函数式编程等。

它让我们能够在运行时动态地引用函数本身,为我们的编程探索提供了更多可能性。

5. 我的观点和理解从我个人的角度来看,arguments callee是JavaScript语言中非常有价值的一个特性。

它使得我们能够更加灵活地处理函数的引用和调用,极大地拓展了我们的编程思路和实践。

在实际项目中,我也曾经利用arguments callee来简化代码和提高效率,因此我对它的重要性深有体会。

6. 总结通过本文的探讨,我们更深入地理解了arguments callee这一概念。

作为一个指向当前执行函数的指针,它在JavaScript编程中扮演着重要的角色,为我们的编程实践带来了更多的可能性。

希望大家在日常编程中能够灵活地运用arguments callee,发挥它的价值,开发出更加高效和优雅的代码。

编程常用的英文单词和语法知识

编程常用的英文单词和语法知识

编程语言的常用英文单词和语法知识在学习和使用编程语言的过程中,熟悉一些常用的英文单词和语法知识是非常重要的。

下面将介绍一些编程中常见的英文单词和语法知识,帮助大家更好地理解和运用编程语言。

常用的英文单词在编程中,我们经常会遇到一些英文单词,这些单词是编程语言中的关键词,了解它们的含义对于正确理解代码非常重要。

下面是一些常用的英文单词及其含义:•Variable(变量):在编程中用于存储数据的一个名称,可以是数字、字符串等不同类型的数据。

•Function(函数):用于完成特定任务的一段代码,可以重复使用。

•Loop(循环):可以重复执行某一段代码的结构,通常用于处理大量数据或重复性任务。

•Conditional(条件):用于根据某些条件来决定程序执行不同的操作。

常用的语法知识除了单词外,还有一些常见的语法知识在编程中也是必不可少的。

这些语法知识规定了代码的结构和逻辑,是编写正确代码的基础。

下面是一些常用的语法知识:•Variable Declaration(变量声明):定义一个变量并为其分配内存空间。

•Data Types(数据类型):定义变量可以存储的数据类型,如整数、浮点数、字符串等。

•Operators(运算符):用于执行特定操作的特殊符号,如加减乘除等。

•Control Statements(控制语句):用于控制程序执行流程的结构,如if语句、for循环等。

总结在学习编程语言时,掌握一些常用的英文单词和语法知识是非常重要的。

这些知识可以帮助我们更好地理解和编写代码,提高编程效率和质量。

希望以上内容能对大家有所帮助,欢迎大家在学习编程的过程中不断积累和提升自己的编程能力!。

python编程术语

python编程术语

python编程术语Python是一种简单易学的编程语言,因其简洁的语法和丰富的库函数而备受开发者的喜爱。

在Python编程中,有一些术语是我们需要了解和掌握的。

本文将介绍Python编程中常用的一些术语及其用法。

1. 变量(Variables)变量是Python中用于存储数据的标识符。

在Python中,我们只需要给变量一个名称,并使用等号(=)将其与对应的值进行赋值即可。

例如:```x = 5name = "John"```2. 数据类型(Data Types)Python支持多种数据类型,以适应不同的数据处理需求。

常见的数据类型包括整数(int)、浮点数(float)、字符串(string)、布尔值(bool)等。

例如:```x = 5y = 3.14name = "John"is_student = True```3. 运算符(Operators)运算符是用于执行各种操作的符号。

Python支持多种运算符,包括算术运算符、比较运算符、逻辑运算符等。

例如:```x = 5 + 3 # 加法运算y = 10 - 4 # 减法运算z = x * y # 乘法运算is_equal = x == y # 相等比较运算```4. 控制流语句(Control Flow Statements)控制流语句用于控制程序的执行流程。

常见的控制流语句有条件语句(if-else)、循环语句(for、while)等。

例如:```x = 5if x > 0:print("x is positive")elif x < 0:print("x is negative")else:print("x is zero")```5. 函数(Functions)函数是一段可重复使用的代码块,它接受一些输入(参数),执行一些操作,并返回一个结果。

javascript中caller和callee详解

javascript中caller和callee详解

javascript中caller和callee详解最近学习javascript,碰到caller和callee的问题,去⽹上百度了很多。

搜到的内容⼤同⼩益,整理总结了⼀下与⼤家分享。

caller:返回⼀个对调⽤function函数的函数的引⽤(⽤法:function.caller)说明:对于函数来说,caller属性只有在函数执⾏时才有定义。

如果函数由顶层调⽤,caller则为null。

var time = 3 //控制次数,去掉会⼀直在caller与handleCaller交替不断执⾏function caller() {caller.caller()//返回调⽤caller函数的函数引⽤}function handleCaller() {if (time > 0){time--alert(handleCaller.caller)//返回调⽤handleCaller函数的函数引⽤alert(caller.caller)//返回调⽤caller函数的函数引⽤caller()}}handleCaller()例⼦分析:第⼀次handleCaller运⾏的时候,两个alert返回的都是null,alert(handleCaller.caller)返回null是因为它是由顶层调⽤, alert(caller.caller)返回null是因为caller的默认值是null。

接下去caller()函数被调⽤,caller.caller返回的是调⽤它的函数(handleCaller)的引⽤,通过caller.caller()可以再次调⽤handleCaller函数。

第⼆次handleCaller运⾏的时候,alert(handleCaller.caller)返回的是caller代码(其实就是caller的引⽤),alert(caller.caller)返回的是handleCaller代码。

因为函数之间的调⽤关系是handleCaller->caller->handleCaller。

arguments详解

arguments详解

arguments详解arguments 是⼀个类似数组的对象, 对应于传递给函数的参数。

1. 描述arguments对象是所有函数中可⽤的局部变量。

你可以使⽤arguments对象在函数中引⽤函数的参数。

此对象包含传递给函数的每个参数的条⽬,第⼀个条⽬的索引从0开始。

例如,如果⼀个函数传递了三个参数,你可以参考它们如下:arguments[0]arguments[1]arguments[2]参数也可以被设置:arguments[1] = 'new value';arguments对象不是⼀个。

它类似于数组,但除了之外没有任何数组属性。

例如,它没有⽅法。

但是它可以被转换为⼀个真正的数组::let args = Array.prototype.slice.call(arguments);let args = [].slice.call(arguments);你还可以使⽤⽅法或将 arguments 转换为真正的数组:let args = Array.from(arguments);let args = [...arguments];对参数使⽤slice会阻⽌某些JavaScript引擎中的优化 (⽐如 V8 引擎 - )。

如果你关⼼它们,尝试通过遍历arguments对象来构造⼀个新的数组。

另⼀种⽅法是使⽤被忽视的/鄙视/轻视,/看不起 Array构造函数作为⼀个函数:let args = (arguments.length === 1 ?[arguments[0]] :Array.apply(null, arguments));如果可⽤的话,下⾯的代码可以作为替代:var args = Array.slice(arguments);arguments对象仅在函数内部有效,在函数外部调⽤ arguments 对象会出现⼀个错误。

arguments的typeof返回'object'。

经典面试题:this、apply、call、bind

经典面试题:this、apply、call、bind

经典⾯试题:this、apply、call、bindthis、apply、call、bind这⼜是⼀个⾯试经典问题~/(ㄒoㄒ)/~~也是 ES5中众多坑中的⼀个,在 ES6 中可能会极⼤避免 this 产⽣的错误,但是为了⼀些⽼代码的维护,最好还是了解⼀下 this 的指向和 call、apply、bind 三者的区别。

原⽂链接:https://juejin.im/post/59bfe84351882531b730bac2?utm_source=tuicool&utm_medium=referralthis 的指向在 ES5 中,其实 this 的指向,始终坚持⼀个原理:this 永远指向最后调⽤它的那个对象,来,跟着我朗读三遍:this 永远指向最后调⽤它的那个对象,this 永远指向最后调⽤它的那个对象,this 永远指向最后调⽤它的那个对象。

记住这句话,this 你已经了解⼀半了。

下⾯我们来看⼀个最简单的例⼦:例 1:var name = "windowsName";function a() {var name = "Cherry";console.log(); // windowsNameconsole.log("inner:" + this); // inner: Window}a();console.log("outer:" + this) // outer: Window这个相信⼤家都知道为什么 log 的是 windowsName,因为根据刚刚的那句话“this 永远指向最后调⽤它的那个对象”,我们看最后调⽤a的地⽅a();,前⾯没有调⽤的对象那么就是全局对象 window,这就相当于是window.a();注意,这⾥我们没有使⽤严格模式,如果使⽤严格模式的话,全局对象就是undefined,那么就会报错Uncaught TypeError: Cannot read property 'name' of undefined。

python中的逻辑用词

python中的逻辑用词

Python是一种非常强大的编程语言,其语法清晰简洁,并且拥有许多逻辑相关的关键字和语句。

下面是一些常见的Python逻辑用词,以及它们的基本含义和用法:1. if:用于进行条件判断,根据条件的结果来执行不同的代码块。

```pythonif condition:# 如果条件为真,则执行这里的代码```2. else:用于在if语句后面添加一个可选的代码块,当条件不满足时执行该代码块。

```pythonif condition:# 如果条件为真,则执行这里的代码else:# 如果条件为假,则执行这里的代码```3. elif:用于在if语句后面添加另一个可选的条件判断,只有当之前的条件都不满足时才会执行这个条件判断。

```pythonif condition1:# 如果条件1为真,则执行这里的代码elif condition2:# 如果条件1为假且条件2为真,则执行这里的代码```4. while:用于循环执行一段代码,直到满足某个条件为止。

```pythonwhile condition:# 循环执行这里的代码,直到条件为假```5. for:用于遍历一个序列(如列表、元组、字符串等)中的每个元素,并对每个元素执行一段代码。

```pythonfor item in sequence:# 遍历sequence中的每个元素,并对每个元素执行这里的代码```6. break:用于在循环中提前终止循环,通常与while或for语句一起使用。

```pythonwhile condition:# 循环执行这里的代码,如果满足某个条件则提前终止循环if some_condition:break # 提前终止循环```7. continue:用于在循环中跳过当前迭代,并进入下一次迭代。

通常与while或for语句一起使用。

```pythonfor i in range(10):# 遍历0到9的数字,如果当前数字是3的倍数则跳过本次迭代,进入下一次迭代if i % 3 == 0:continue # 跳过本次迭代,进入下一次迭代print(i) # 打印当前数字```8. or:用于连接两个布尔表达式,返回它们中的任意一个为真即可。

flutter .call语法

flutter .call语法

flutter .call语法摘要:1.引言2.Flutter 介绍3.call 语法概述4.call 语法使用示例5.call 语法的优势和局限6.总结正文:Flutter 是谷歌推出的一款开源UI 工具包,它可以帮助开发者使用一套代码库快速构建美观且高性能的跨平台应用。

在Flutter 中,`.call`语法是一种强大的功能,可以实现方法间的调用,本文将详细介绍`.call`语法的使用。

首先,我们需要了解Flutter 的架构。

Flutter 的框架层主要包括三部分:Dart 框架、Dart 运行时和渲染引擎。

其中,Dart 框架提供了丰富的语言特性,如异步编程、状态管理等,方便开发者构建复杂的应用逻辑。

在Flutter 中,`.call`语法是一种便捷的方法调用方式,可以简化代码结构,提高代码可读性。

`.call`语法的基本形式如下:```dartMethodName.call(arg1, arg2, ...);```其中,`MethodName`是调用的方法名,`arg1`、`arg2`等是传递给方法的参数。

请注意,`.call`语法要求方法必须具有以下特点:- 方法必须具有一个参数列表(可以是非空的)- 方法必须有一个返回值(可以是无返回值的void 方法)下面,我们通过一个简单的例子来演示`.call`语法的使用:```dartclass Calculator {int add(int a, int b) => a + b;int subtract(int a, int b) => a - b;}void main() {Calculator calculator = Calculator();int result = calculator.add.call(10, 5);print(result); // 输出:15result = calculator.subtract.call(10, 5);print(result); // 输出:5}```在上面的例子中,我们定义了一个`Calculator`类,其中有两个方法:`add`和`subtract`。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

详解arguments,callee,caller,call,apply的区别
1、一个完整的JavaScript应由三部分组成:核心(ECMAScript),文档对象模型(DOM),浏览器对象模型(BOM);
2、ECMAScript中的参数在内部使用一个类数组来表示的,函数接收到的始终是这个类数组,在函数体内可以通过arguments对象来访问这个参数数组,arguments对象其实是一个类数组,不是Array的实例,可以通过方括号语法来访问,同时也可以使用length方法;
关于arguments,它的值永远与对应命名参数的值保持同步,因为arguments对象中的值会自动反应到对应的命名参数,即修改了arguments[1]也就修改了num2,但这并不是说它们有相同的内存空间,它们的内存空间是独立的,这种影响是单向的,修改命名参数不会改变arguments中对应的值;另外还要记住,如果只传入了一个参数,那么arguments[1]设置的值不会反应到命名参数中。

这是因为arguments的长度是由传入的参数决定的,不是由定义函数时命名参数的个数决定的;另外,没有传递值的命名参数将自动被赋予undefined值;
3、虽然arguments的主要用途是保存函数参数,但这个对象还有一个名叫callee的属性,该属性是一个指针,指向拥有arguments这个对象的函数。

callee属性的初始值就是正在被执行的function对象。

callee属性是arguments 对象的一个成员,它表示对函数对象本身的引用,这有利于匿名函数的递归或确保函数的封装性,需要注意的是callee拥有length属性,arguments.length是实参长度,arguments.callee.length是形参长度,由此能够判断调用时形参长度是否和实参长度一致。

4、对于函数来说,caller 属性只有在函数执行时才有定义。

caller这个属性保存着调用当前函数的函数作用域;
5、ECMAScript中的函数是对象,因此函数也有属性和方法,每个函数都包含两个属性,length和prototype,其中length属性表示函数希望接收的命名参数的个数;
6、对于ECMAScript中的引用类型而言,prototype保存了它们所有的实例方法;诸如
toString(),valueOf()等方法实际上都保存在prototype下;
7、每个函数都包含两个非继承的方法:call()和apply(),用途都是在特定的作用域中调用函数,实际上等同于设置函数体内的this对象的值;即将函数绑定到另一个对象上去执行。

call()方法和apply()方法的作用相同,它们的区别仅仅在于接收参数的方式不一样,对于call( )方法而言,第一个参数this没有变化,变化的是传递给函数的参数必须逐个列举出来;
call()和apply( )方法真正强大的地方在于能够扩充函数的作用域,而且对象不需要与方法有任何的耦合关系;。

相关文档
最新文档