javascript函数如何在其中具有属性?

时间:2018-08-10 10:17:27

标签: javascript javascript-objects

function myFunc(){
    console.log(myFunc.message);
}
myFunc.message = "Hi John";

myFunc();

在-

中执行上述结果
Answer: 'Hi John'

函数myFunc的属性如何messagetypeof myFunc产生“功能”,而console.log(myFunc)显示功能内容(不带属性message)。

以上内容如何运作? JavaScript内部的函数是对象吗?

注意-我知道函数具有其他参数,例如原型和长度。但是我不确定这些如何实现。

其他查询- 由于console.log(myFunc)未显示对象属性,因此如何列出功能对象的所有属性?

4 个答案:

答案 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的声明也被吊起,但letconst未被声明)

关于函数声明和函数提升的MDN has more