function myFunc(){
console.log(myFunc.message);
}
myFunc.message = "Hi John";
myFunc();
在-
中执行上述结果Answer: 'Hi John'
函数myFunc
的属性如何message
? typeof myFunc
产生“功能”,而console.log(myFunc)
显示功能内容(不带属性message
)。
以上内容如何运作? JavaScript内部的函数是对象吗?
注意-我知道函数具有其他参数,例如原型和长度。但是我不确定这些如何实现。
其他查询-
由于console.log(myFunc)
未显示对象属性,因此如何列出功能对象的所有属性?
答案 0 :(得分:3)
以上内容如何运作? javascript中的函数在内部是对象吗?
是
function example() {};
console.log(example instanceof Object);
答案 1 :(得分:3)
是的,they are objects。
尤其是:
每个JavaScript函数实际上都是一个Function对象。这可以通过返回
(function(){}).constructor === Function
的代码true
看到。
答案 2 :(得分:0)
根据MDN,函数的定义为:
在JavaScript中,函数是一类对象,因为它们可以像其他任何对象一样具有属性和方法。它们与其他对象的区别在于可以调用函数。简而言之,它们是函数对象。
因此,通过执行myFunc.message
,您将向myFunc
函数(或对象)添加一个附加属性,然后可以像其他对象一样在函数内部对其进行访问。
答案 3 :(得分:0)
在JavaScript中,函数为first class objects。您可以向变量分配函数,将其作为参数传递,向其添加属性,将其添加为属性或数组成员等事实证明了这一点。
var myFunction = function(passedFunction){
passedFunction();
console.log(myFunction.message);
};
let functionsArray = [myFunction, function() {
myFunction.message = "Hello World";
}];
functionsArray[0](functionsArray[1]);
以上输出“ Hello World”
这看起来很奇怪的部分原因可能在于函数的声明方式。为了表现得像C(但不是真的)或其他语言,其中在执行适当的代码之前以某种方式定义了函数,裸露的“ function”语句“悬挂”了函数声明。所以在这里使用这种语法:
myFunction();
function myFunction(){
console.log("Hello world");
}
实际上发生的是您的函数声明被“悬挂”起来,就像是这样:
let myFunction = function(){
console.log("Hello world");
}
myFunction();
上面的这两个代码段在JavaScript中基本上是等效的。 (注:var
的声明也被吊起,但let
和const
未被声明)
关于函数声明和函数提升的MDN has more。