2015-08-17 3 views
1

люди.Закрытие внутри Угловой контроллер

Я изучаю AngularJS, и я удивляюсь, почему функция внутри контроллера не работает как clojure. Вот классический пример того, как закрытие работ

var inner; 

var outer = function(x) { 
    inner = function() { 
     console.log(x); 
    } 
} 

outer(3); 

inner(); 

Итак, я ожидал подобное поведение от этого куска кода

angular.module('MyModule') 
.value('x', 3) 
.controller('MyCtrl', function($scope, x) { 
     $scope.showMeX = function() { 
      alert(x); 
     } 
    } 
}); 

Тем не менее, впрыскивается переменной «х» не доступен из внутри «showMeX '. Почему нет?

Я мог догадаться, что Angular обеспечивает доступ к объекту $ scope, чтобы избежать беспорядка с некоторыми объектами, которые являются внешними по отношению к области $ scope, и такие объекты этой логикой должны быть «невидимыми». Тем не менее, на данный момент я не понимаю, как это работает.

Любые мысли? Ссылка на некоторые разъясняющие вещи для чтения была бы идеальной.

+0

Кажется, что он отлично работает http://jsfiddle.net/ab537s7v/. Вы получаете сообщение об ошибке? – pablochan

+0

О, мой плохой, я копировал его из моего кода, не пытаясь сыграть скрипку. спасибо за довольно ответ, это действительно работает, и все идет так, как ожидалось. я должен удалить свой вопрос сейчас, не имеет смысла держать его, правильно? –

+0

Ну, вы можете опубликовать ответ, чтобы объяснить, что произошло, все в порядке, чтобы сделать некоторые ошибки, пока вы делаете это правильно в конце. :) – axelduch

ответ

0

Это, вероятно, иллюзия. Для этого были закрыты JavaScript, вы никогда не получите ReferenceError для x с кодом, который вы указали выше. Это не значит, что x не может быть undefined.

+0

Да, @pablochan показал мне правду :) в следующий раз я буду осторожен. просто с точки зрения этики ... Должен ли я отмечать ваш ответ как правильно, или я должен сам ответить и сказать, что я был неправ? –

+0

Сделайте, как вам угодно, мой ответ не вреден, по крайней мере, но он не описывает конкретно, где вы были неправы. Я предлагаю вам сделать свой собственный ответ – axelduch

+0

нормально, это не повредит вашей марки :) –

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