我想知道内在的功能是什么样的? 我知道你可以写下面的
var obj = {
test: 'something'
}
但是在这段代码中,innerfunction不是指变量,而是指函数。 有没有其他方法可以编写/调用内部函数?
function outer(){
var a = "Outerfunction";
console.log(a)
innerFct: function InnerFct() {
var c = "Inner";
console.log(c)
}innerFct();
}
window.outer();
谢谢
答案 0 :(得分:2)
这里有几件不同的事情。
在此代码中:
var obj = {
test: 'something'
}
您正在使用“文字对象表示法”来创建 - 具有一个属性test
的对象,该属性的值为something
在第二种情况下,您正在创建一个代码块(是的,对象和代码块使用相同的语法{...}
定义它们很有趣。
在代码块内部,innerFct:
成为标签。标签与一些控制流语句一起使用以跳转。忘了他们,你最好不要使用它们。
function outer(){
var a = "Outerfunction";
console.log(a)
function innerFct() {
var c = "Inner";
console.log(c)
}
innerFct();
}
outer();
甚至
function outer(){
var a = "Outerfunction";
console.log(a)
var innerFct = function () {
var c = "Inner";
console.log(c)
}
innerFct();
}
outer();
答案 1 :(得分:1)
您将functions
与objects
混淆。
使用对象时,冒号用于显示键值对。
var object = {
innerFct: function(){
console.log('rawr');
},
someVariable: 7
}
object.innerFct(); //logs rawr
object.someVariable = 4; //just changed from 7 to 4
使用冒号如何在示例中使用它是不正确的语法。此外,当您在这样的对象中创建函数时,您不必再次命名该函数,因为您已将其分配给对象上的名称。
然后你可以通过这样的方式随时编辑这个功能:
object.innerFct = function(){
//new code
}
执行object.innerFct()
将调用该函数。
答案 2 :(得分:0)
其他答案已充分涵盖了对象语法并在范围内调用了该函数。正如我在评论中提到的,你可以这样做:
function outer(){
(function () {
var c = "inner";
console.log(c)
})();
}
window.outer();
它记录inner
就好了。
修改:原始代码示例中的innerFct
等私有/隐藏变量也可以在闭包中捕获。
outer = function() {
var innerFct = function () { console.log("inner"); }
// innerFct is captured in the closure of the following functions
// so it is defined within the scope of those functions, when they are called
// even though it isn't defined before or after they complete
window.wrapper = function() { innerFct(); }
return function() { innerFct(); }
}
outer();
// each of these next three lines logs "inner"
window.wrapper(); // assigned to global variable
outer()(); // calling the returned function
var innerFctBackFromTheDead = outer(); // saving the returned function
innerFctBackFromTheDead();
还有对象构造函数/原型语法。
function Outer() {
this.inner = function() {
this.c = "inner";
console.log(this.c);
}
}
var out = new Outer();
out.c; // undefined
out.inner(); // logs "inner"
out.c; // "inner"
有关新关键字和原型的更多信息:http://pivotallabs.com/javascript-constructors-prototypes-and-the-new-keyword/