javascript范围和js范围之间的区别是什么

javascript范围和js范围之间的区别是什么,javascript,angularjs,Javascript,Angularjs,我试图了解JavaScript范围和Angularjs范围之间的区别。当我在网上搜索时,我发现中的范围JavaScript有两个范围:全局范围和局部范围,它们指的是变量,但在Angular中,$Scope是应用程序对象我不太清楚,有人能帮我举个例子说明什么是范围。。。。。我想知道是否范围只有这个词的含义相同,因为两种技术都不同,请解释一下 谢谢JavaScript JavaScript中的作用域是特定代码段可以访问的变量。它包括当前函数中的变量、任何包含函数中的变量以及所有全局变量 例如,下面是

我试图了解JavaScript范围和Angularjs范围之间的区别。当我在网上搜索时,我发现中的范围JavaScript有两个范围:全局范围和局部范围,它们指的是变量,但在Angular中,$Scope是应用程序对象我不太清楚,有人能帮我举个例子说明什么是范围。。。。。我想知道是否范围只有这个词的含义相同,因为两种技术都不同,请解释一下


谢谢

JavaScript

JavaScript中的作用域是特定代码段可以访问的变量。它包括当前函数中的变量、任何包含函数中的变量以及所有全局变量

例如,下面是一个简单的JavaScript,它显示了某些变量,这些变量在特定代码段的作用域内,也不在特定代码段的作用域内:

<script type="text/javascript">
    var a = 1; // in scope

    function W() {
        var b = 2; // not in scope
    }

    function X() {
        var c = 3; // in scope

        function Y() {
            var d = 4; // not in scope
        }

        function Z() {
            var e = 5; // in scope

            // here is my code
            // it has access to a, c, and e
            a = c + e;
        }

    }
</script>


{{message}}
{{message}}
消息
变量在每个变量中都是不同的,因为两者之间没有继承关系

差异

JavaScript中的作用域行为和Angular中的作用域行为有一个显著的区别。这种行为是由于使用了角度范围。关于这一点,已经有很多文章写了,所以我不想说太多细节,但重要的是要记住:

更改子范围中的变量不会影响父范围中相同的命名变量

每个子作用域都有效地获取其自己的所有继承属性的副本。当子作用域修改它时,它只修改它的副本,而不修改父作用域的副本


JavaScript中并非如此。在第一个示例中,
Z
函数为全局
a
变量赋值。所有代码都可以看到此更改。这在Angular中是不正确的。

JavaScript

JavaScript中的作用域是特定代码段可以访问的变量。它包括当前函数中的变量、任何包含函数中的变量以及所有全局变量

例如,下面是一个简单的JavaScript,它显示了某些变量,这些变量在特定代码段的作用域内,也不在特定代码段的作用域内:

<script type="text/javascript">
    var a = 1; // in scope

    function W() {
        var b = 2; // not in scope
    }

    function X() {
        var c = 3; // in scope

        function Y() {
            var d = 4; // not in scope
        }

        function Z() {
            var e = 5; // in scope

            // here is my code
            // it has access to a, c, and e
            a = c + e;
        }

    }
</script>


{{message}}
{{message}}
消息
变量在每个变量中都是不同的,因为两者之间没有继承关系

差异

JavaScript中的作用域行为和Angular中的作用域行为有一个显著的区别。这种行为是由于使用了角度范围。关于这一点,已经有很多文章写了,所以我不想说太多细节,但重要的是要记住:

更改子范围中的变量不会影响父范围中相同的命名变量

每个子作用域都有效地获取其自己的所有继承属性的副本。当子作用域修改它时,它只修改它的副本,而不修改父作用域的副本


JavaScript中并非如此。在第一个示例中,
Z
函数为全局
a
变量赋值。所有代码都可以看到此更改。在角度上,情况并非如此。

它们是完全不同的东西,但以相关的方式工作。我不确定在不进一步混淆问题的情况下比较这两种方法是否有效。您需要学习三件事:Javascript作用域如何工作,句号;
$scope
对象如何以角度工作;Angular模板如何与
$scope
对象交互。我从javascript的在线作用域中了解到变量是正确的还是我的理解是错误的这在Angular文档中记录得非常好有问题的是什么请解释我为什么会得到负面标记看到它们完全不同事情,但以一种相关的方式工作。我不确定在不进一步混淆问题的情况下比较这两种方法是否有效。您需要学习三件事:Javascript作用域如何工作,句号;
$scope
对象如何以角度工作;Angular模板如何与
$scope
对象交互。我从javascript的在线作用域中了解到,变量是正确的还是我的理解是错误的这在Angular文档中记录得非常好有问题的是什么请解释我为什么会得到负面标记参见
<div ng-controller="MyController">
    <span>{{message}}</span>
</div>
app.controller('MyController', function ($scope) {
    $scope.message = 'Hello Cleveland!';
    $scope.show = true;
}
<div ng-controller="MyController">
    <div ng-if="show">
        <span>{{message}}</span>
    </div>
</div>
app.controller('Ctrl1', function ($scope) {
    $scope.message = 'This controller is #1';
}
app.controller('Ctrl2', function ($scope) {
    $scope.message = 'This is the second controller';
}
<div ng-controller="Ctrl1">
    <span>{{message}}</span>
</div>
<div ng-controller="Ctrl2">
    <span>{{message}}</span>
</div>