Javascript 这是命名约定还是函数声明

Javascript 这是命名约定还是函数声明,javascript,function,Javascript,Function,我正在学习javascript,现在开始学习对象和基本函数。我遇到了这种类型的代码,想知道这到底是什么 var stringFunction = function(){}; stringFunction.test1 = function(){ console.log("Test 1"); } test1是stringFunction的一部分还是仅仅是一个命名约定。提前感谢在JavaScript中,每个函数都是一个函数对象。看见在示例中,代码在对象stringFunction上创建属性“t

我正在学习javascript,现在开始学习对象和基本函数。我遇到了这种类型的代码,想知道这到底是什么

var stringFunction = function(){};

stringFunction.test1 = function(){
  console.log("Test 1");
}

test1是stringFunction的一部分还是仅仅是一个命名约定。提前感谢在JavaScript中,每个函数都是一个函数对象。看见在示例中,代码在对象stringFunction上创建属性“test1”。新属性是它本身的函数对象。

函数
实例在Javascript中有点“怪异”,因为它们是对象,但它们的
类型是
“函数”
,而不是
“对象”

但是,它们可以使用语法
f.x
f[“x”]
添加和访问属性。您的代码只是将一个属性添加到
函数
对象中(该属性的值也是一个函数,但这是不相关的)。

这里
test1()
stringFunction
变量的属性(函数类型)。
因此,您在函数对象中定义了一个函数。

您可以通过调用
stringFunction.test1()来使用它因为您可以调用外部函数:
stringFunction()

输出:

测试字符串功能

测试1


两者都不是,这是一个属性定义。JS中的函数是对象,但在为stringFunction执行typeof时,它将作为函数而不是object@Srikanth:是的。。。他们很“怪异”。但如果奇怪和特殊情况让你感到害怕,那么Javascript可能不是你的语言:-d可能是的重复,我们仍然可以调用stringFunction(),它将像以前一样工作?@Mohit Bhardwaj是的。这是两个不同的可用对象。谢谢@davidxxx:)哦,好的,但是当你控制台记录一个对象时,你将能够看到与该对象相关的所有属性和其他原型,而对于这个实例,我只能看到与属性相关联的函数。@Srikanth:实际上,
函数
实例非常奇怪。。。例如
Object.keys(f)
将返回您添加的所有属性的名称(但不是预定义属性,例如
“name”
)。另一个奇怪之处是,例如
f.length
返回0,而不是
未定义的
,并且无法设置。
var stringFunction = function(){console.log("Test stringFunction")};

stringFunction.test1 = function(){
    console.log("Test 1");
}

stringFunction();
stringFunction.test1();