时间:2021-05-26
静态作用域指的是一段代码,在它执行之前就已经确定了它的作用域,简单来说就是在执行之前就确定了它可以应用哪些地方的作用域(变量)。
动态作用域–函数的作用域是在函数调用的时候才决定的
JavaScript采用的是词法作用域即静态作用域;
// 静态作用域:var a = 10;function fn() { var b = 1; console.log(a + b);}fn(); // 11在创建fn函数时的时候就已经确定了它可以作用哪些变量,如果函数fn里面有变量a就直接操作变量a,
如果没有就往上一级查找,这就是静态作用域
// 动态作用域:function foo() { console.log(a);}function bar() { var a = 3; foo();}var a = 2;bar(); // 2;bar 调用,bar里面foo被调用,foo函数需要查找变量a,由于JavaScript是词法作用域(即静态作用域),foo被解析时在全局作用域.
所以只能在全局作用域中找a,输出结果为2,而非bar作用域中的a。如果js采用的时动态作用域,那么foo在bar中调用,就会先在bar中查询a,输出为3。
ps:下面看下JavaScript之静态作用域
作用域是指代码中定义变量的区域。作用域规定了如何查找变量,也就是确定当前代码对变量的访问权限。
静态作用域和动态作用域
静态作用域是指函数的作用域在函数定义时就已经确定了,而动态作用域是指函数的作用域在运行时才确定。下面是一段代码:
var value = 1;
function foo() {
console.log(value);
}
function bar() {
var value = 2;
foo();
}
bar();
如果这段代码使用静态作用域的方式访问变量,那么执行foo()函数时,首先查看函数内是否存在局部变量value的定义,如果没有,则查找之前的代码,也就是var value = 1;,查找到了value的定义为1,因此输出1。
如果这段代码使用动态作用域的方式访问变量,那么执行foo()函数时,首先依旧从函数内部查找是否存在局部变量value的定义,如果没有,那么从调用方bar()函数的作用域中查找,找到了var value = 2;,因此输出2。
JavaScript采用静态作用域的方式访问变量,因此这个例子输出为1。
常见的采用动态作用域的语言是bash。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
javascript作用于作用域链的详解一、JavaScript作用域任何程序设计语言都有作用域的概念,简单的说,作用域就是变量与函数的可访问范围,即作用域控制
1、Javascript变量作用域javascript中,变量主要分为局部变量和全局变量两种,对应的作用域也是局部作用域和全局作用域。1局部变量和作用域局部变量
本文实例分析了JavaScript函数作用域链。分享给大家供大家参考。具体分析如下:作用域链:JavaScript的每个函数function都有自己的作用域,使
深入理解Js中的thisJavaScript作用域为静态作用域staticscope,但是在Js中的this却是一个例外,this的指向问题就类似于动态作用域,
作用域是JavaScript最重要的概念之一,想要学好JavaScript就需要理解JavaScript作用域和作用域链的工作原理。今天这篇文章对JavaScr