pokeApp.controller('mycontroller', function($scope, $routeParams){
// part 1: // why would this not work
$scope.myFunc();
$scope.myFunc = function(){
console.log("Hi !");
}
// part 2: // why would this not work
this.helloWorld();
this.helloWorld = function(){
console.log("Hello World");
}
}
您好 我的问题是为什么这两件事不起作用;我的意思是要么在控制器中,要么在范围内。我知道我可以调用一个简单定义的函数'函数helloWorld(){...}'
谢谢!
答案 0 :(得分:1)
您在定义之前调用该函数。将您的代码更改为:
$scope.myFunc = function(){
console.log("Hi !");
}
$scope.myFunc();
答案 1 :(得分:1)
您希望功能提升发生:
myFunct();
function myFunct() {
alert('hey');
}

这会奏效。
但这不会:
myFunct();
var myFunct = function() {
alert('hey');
}

类似的情况与控制器范围属性一起进行,在这种情况下,其行为与常规变量完全相同,意味着不会发生提升。
你会在这里找到一些很好的解释:var functionName = function() {} vs function functionName() {}。
因此,要使原始代码中的所有内容都使用提升功能,它应如下所示:
pokeApp.controller('mycontroller', function($scope, $routeParams){
// part 1:
myFunc();
function myFunc(){
console.log("Hi !");
}
// part 2:
helloWorld();
function helloWorld(){
console.log("Hello World");
}
}
或者,一种维持范围的小方法:
pokeApp.controller('mycontroller', function($scope, $routeParams){
// part 1:
$scope.myFunc = myFunc; // this is the key, assigns a hoisted function value
// to the $scope object property which is then ready
$scope.myFunc();
function myFunc(){
console.log("Hi !");
}
// part 2:
this.helloWorld = helloWorld;
this.helloWorld();
function helloWorld(){
console.log("Hello World");
}
}
这是一个显示实际操作的片段:
var myObj = {};
myObj.f = myFunct;
myObj.f();
function myFunct() {
alert('yay, it still works!');
}

答案 2 :(得分:0)
您可以使用吊装来执行此操作:
app.controller('MainCtrl', function($scope) {
$scope.myFunc = myFunc;
$scope.myFunc();
function myFunc(){
console.log("Hi !");
}
});
Heare是关于它的好文章 - http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html
P.S。 实际上,在实际操作中,我无法看到任何理由......