2014-01-15 3 views
1

У меня вопрос «новичок». Почему эта ошибка отсутствует? Я вызываю функцию в коде, но функция определяется ниже. версияФункция подъема функции AngularJS

AngularJS:

var myApp = angular.module('myApp',[]); 

function MyCtrl($scope) { 
    $scope.name = 'Someone'; 
    $scope.doStuff(); // run the defined function, but errors out 

    $scope.doStuff= function(){ // function definition 
     console.log('did something'); 
    } 
} 

http://jsfiddle.net/2fjuJ/4/

Но это работает отлично:

var myApp = angular.module('myApp',[]); 

function MyCtrl($scope) { 
    $scope.name = 'Someone'; 
    $scope.doStuff = function(){ 
     console.log('did something'); 
    } 

    $scope.doStuff(); 
} 

http://jsfiddle.net/2fjuJ/5/

+1

Проверьте это: http://stackoverflow.com/questions/16439949/define-local-function-in-javascript-use-var-or-not –

+0

спасибо. Я обязательно прочитаю это. – SoluableNonagon

+0

Также это: http://designpepper.com/blog/drips/variable-and-function-hoisting –

ответ

4

Вы не объявляя новую переменную, когда вы пишете $ объем .doStuff = function() {...}, вы назначаете которое не поднимается. в то время вы звоните $ scope.doStuff(), $ сфера выглядит следующим образом:

{ 
    name: "Someone" 
} 

Как вы можете видеть, что нет никакой собственности «DoStuff» до следующей строки не выполняется.

+0

Что объявляет переменные с этим? – zeroflagL

+0

достаточно простой. надеялся на решение исправить это, но объяснение достаточно ясное. – SoluableNonagon

Смежные вопросы