首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript函数表达式

Javascript函数表达式
EN

Stack Overflow用户
提问于 2015-10-17 04:33:21
回答 1查看 87关注 0票数 1

我最近一直在尝试学习javascript,并有几个问题。

创建函数表达式时:

代码语言:javascript
复制
var greet = function(){
    console.log('Hi');
}

创建函数对象并让变量"greet“指向内存中的函数对象吗?

我的第二个问题是,如果你有这样的功能:

代码语言:javascript
复制
function log(a){
    console.log(a);
}

然后调用该函数:

代码语言:javascript
复制
log(greet); //greet is the function expression declared above.

所以我知道,当函数对象被创建时,有两个属性被赋予了对象。名称(如果提供,否则是匿名的)和一个代码属性,该属性存储函数括号中包含的代码。现在,我对log函数中的参数"a“被附加到函数对象中的位置感到有点困惑。“是”只是函数对象日志的另一个属性,它只是指向传递给日志函数的任何东西的内存地址?在这种情况下,它是一个叫做greet的函数表达式。如有任何意见,将不胜感激。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-17 05:15:51

当函数被调用时,如:

代码语言:javascript
复制
log(greet)

然后在当前执行上下文中解析标识符日志,如果找不到,则沿着作用域链搜索,以全局执行上下文结束。如果未找到,则引发错误。

在本例中,日志是使用函数声明定义的,因此它存在于全局范围中。将检查它的值,以确保它是可调用的(如果不是,则抛出错误),如果是,则调用它。

在调用中,解析标识符greet并将其值传递给函数。如果greet无法解决(即它在作用域链中不存在),则会引发错误。在这种情况下,它将解析为对分配给greet的函数的引用。

执行日志时,将创建一个新的执行上下文。log的函数声明定义了一个形式参数a(在它的形式参数列表中),因此a被创建为日志的局部变量。调用中的值按顺序传递给形式参数列表中的标识符,因此将greet的值分配给.注意,每次调用函数时都会初始化和创建新的执行上下文。

调用时遵循相同的过程:

代码语言:javascript
复制
console.log(a);

因此,在console.log中,作为第一个参数传递对greet的引用,因此它现在引用greet函数。

console.log的行为完全依赖于实现,因此内部元素是未知的,但是对于函数,大多数倾向于只调用函数的toString方法。

ECMAScript的一个方便的特性是,通过传递给函数的参数创建参数对象,因此如果没有为参数分配参数,传递的值总是可以作为参数对象的数值属性使用。因此,console.log不必定义任何形式的参数,它只需循环其参数对象并依次处理传递的值。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33182772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档