Javascript 为什么控制器方法中$scope为null

Javascript 为什么控制器方法中$scope为null,javascript,angularjs,angularjs-scope,closures,Javascript,Angularjs,Angularjs Scope,Closures,我有下面的视图和一个控制器。我只是想在ng click处理程序(提交表单)中检查$scope对象的双向数据绑定,但它始终未定义 以下是我的看法: <body ng-controller="efController" class="container"> <form role="form" class="form-horizontal"> <div class="form-group"> <l

我有下面的视图和一个控制器。我只是想在ng click处理程序(提交表单)中检查$scope对象的双向数据绑定,但它始终未定义

以下是我的看法:

<body ng-controller="efController" class="container">
    <form role="form" class="form-horizontal">
            <div class="form-group">
                <label for="fullName" class="col-sm-3 control-label">Name</label>
                <div class="col-sm-9">
                    <input type="text" id="name" name="name" class="form-control" ng-model="name" />
                </div>
            </div>
        <input type="submit" class="btn btn-primary" value="Submit" ng-click="submitForm()" />
    </form>
</body>
如果我的submitForm()函数中没有任何内容,并且我在右大括号上放置了一个断点,那么$scope在监视中始终是未定义的,但是如果我只是使用$scope.prop编写警报或访问任何模型属性,它总是可以的

我的问题是,当函数被正确调用并且$scope也被注入时,为什么它没有定义

编辑:这是一段视频截图,视频中的一个人正在查看watch中的$scope,你可以相信我,我的代码与他的代码完全相同。这是连接到pluralsight课程的链接


编辑2:这是约翰爸爸

因为闭包就是这样工作的。只有在submitform函数中使用scope变量时,该变量才能在该函数中使用。如果其他人愿意的话,我会让他们详细介绍。@jlowcs您能再解释一下吗?我在pluralsight的angular课程中也看到了同样的事情。另一个简短的解释是:在JS中——这与angular无关——每个函数的执行都会创建一个该函数使用的所有变量的闭包。由于您注释了
$scope.name
,$scope未包含在
提交表单
闭包中,因此在添加断点时无法看到它。@jlowcs如果您告诉我它是由于闭包引起的,那么根据我对闭包的最简单理解,任何嵌套函数都可以访问外部函数的变量。那么为什么$scope在内部函数中没有定义呢?如果我在这里出错,请帮助我纠正我的闭包概念。创建一个plunkr或codepen,我们将帮助调试
app.controller("efController",
    function ($scope) {
        $scope.submitForm = function () {
            //alert($scope.name);
        }
    }]);