为什么我可以在javascript中声明之前返回一个函数?

pQu*_*123 2 javascript

为什么以下工作:

function outsideFunction() {
   return {
    insideFunction: insideFunction
}

function insideFunction() {
    ...stuff
}
}
Run Code Online (Sandbox Code Playgroud)

function insideFunction() {
    ...stuff
}
Run Code Online (Sandbox Code Playgroud)

同样的

var insideFunction = function() { ...stuff }
Run Code Online (Sandbox Code Playgroud)

哪会导致var insideFunction被提升到顶部?在对象声明中使用时不应该insideFunction返回undefined

我可以用对象做同样的事情吗?换句话说,我可以这样做:

return {objectName: objectName}
var objectName = {}
Run Code Online (Sandbox Code Playgroud)

Jam*_*rpe 5

这是因为吊装 - 在您宣布之前可以访问的东西,因为所有声明都"悬挂"到您的范围顶部.你说:

function insideFunction() {
    ...stuff
}
Run Code Online (Sandbox Code Playgroud)

同样的

var insideFunction = function() { ...stuff }
Run Code Online (Sandbox Code Playgroud)

号按了MDN文件:

JavaScript中的函数声明正在提升函数定义.您可以在声明之前使用该功能:

hoisted(); // logs "foo"

function hoisted() {
  console.log("foo");
}
Run Code Online (Sandbox Code Playgroud)

请注意,函数表达式不会被挂起:

notHoisted(); // TypeError: notHoisted is not a function

var notHoisted = function() {
   console.log("bar");
};
Run Code Online (Sandbox Code Playgroud)

最后问题:

我可不可以做:

return {objectName: objectName}
var objectName = {}
Run Code Online (Sandbox Code Playgroud)

再一次,没有.虽然objectName将被声明(因此您避免参考错误),但它返回时的值将是undefined.