问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

关于静态和动态作用域规则的疑问。

发布网友 发布时间:2022-05-18 15:15

我来回答

2个回答

懂视网 时间:2022-05-18 19:37

静态作用域指的是一段代码,在它执行之前就已经确定了它的作用域,简单来说就是在执行之前就确定了它可以应用哪些地方的作用域(变量)。

动态作用域–函数的作用域是在函数调用的时候才决定的

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。

热心网友 时间:2022-05-18 16:45

原内容为:<br />静态静态的。只是一个正常的函数定义,但落后的东西从全局变量的作用。的一般定义的变量将默认为自动动态,在其范围内,在栈上分配的变量,因为最终的范围将被释放的内存。静态不会,即使该块已经完成,但它仍然存在,要知道程序结束。 <br /> <br /> {<br /> INT I = 0; <br /> ...... <br />} <br />这一点,我没有任何意义<BR />引用在这一点上我错了。 <br />声明为静态变量不能出差错。 <br /> <br />生命周期应该存在周期。 <br />范围,它只是意味着你声明一个变量,您可以参考和使用范围。 <br />全局变量范围内的所有功能,你可以把它所有的功能。 <br />普通函数定义的变量函数,而不仅仅是功能。如:<br />无效XX()<br /> {<br />诠释了; <br />(INT I = 0;我<10; i + +)<br /> {< /> / /。.................. <br />} <br />} <br />这里的范围,我不喜欢。 <br />一个XX功能是有效的,而我只在for循环中发挥作用。 <br />按照最新的规则,我们定义了两个循环的功能,控制回路变量,我们可以采取相同的名称。如:<br />无效的XX()<br />为(int i = 0; <10; i + +)<br /> {<br /> <br /> {/ /循环1 < />} <br />为(int i = 0; <100; i + +)<br /> / /循环<br />} <br />如果没有范围的区别,那么被认为是一个重新定义。 <br />其实,这是合法的。追问WTF

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
肺气肿吃什么食物最好 吃什么对肺气肿好 肺气肿老人吃什么水果好 世界乐坛唱功排行? 全球唱功排名? 全球唱功排名 MariahCarey与CelineDion谁唱歌唱得好些?或者谁的唱功较好? Mariah Carey 与 Celine Dion谁唱歌唱得好些?或者谁的唱功较好 国家水费多少钱一吨 国家水费标准是多少一吨?多少水才算一吨 水费是多少钱一吨 请把红苹果写成比喻句 比喻句填空:苹果是那么红,红得像()。 苹果很甜改为比喻句 苹果像什么比喻句写的太好? 群主用不了,如何更换群主? 什么盒子支持5gwifi 请问有5g信号网络机顶盒 校园无线WIFI,怎么修改IP或者说如何盗取同校别人的IP? 攻击别人IP,还有,我怎么电脑上有两个ip号呢? 怎么跳转到人脸识别? 我看到有的小服装店里有像空调一样的东西,放地上的,很小,和一个小的旅行箱差不多大,那是啥, 我才17岁为什么腿毛这么长啊 是不是发育成熟了 不长个了? 腿毛为什么永远那么长 美的KF-120LW/SY-GA型空调故障 晚上梦见很多蛇!是不是有不好的征兆? 梦见很多蛇一起在家阳台上往砖下钻? iphone7用ios15.0.2和15.1哪个好 深度:独家解析爱驰U5动力电池热管理策略及续航表现 玫瑰花糠疹的各种症状图片 白色糠疹不治疗会好吗 怎么用筷子做圆柱体灯笼 筷子做什么形状的灯笼好看 请高人免费按生辰八字给女儿起名!谢谢!06年农历2月22日2点生!我姓刘 静态语言和动态语言在变量的作用域的区别是什么 无意中发现室友电脑里有很多gv,平时已经觉得他很奇怪,像个gay,现在想法得到证实,都不能好好跟他 电脑里的GVA卡是什么 穷人活着有什么意义? 穷人活着有什么意义 穷人活着的意义是什么 穷人活着有什么意义?有必要活着吗? 穷人活着的意义到底是什么 穷人活着的意义是什么? 穷人活着到底是为了什么,天天吃苦,这样活着有什么意思,,, 穷人生活的意义是什么?? 穷人们活着有什么意义 人活着的意义在哪? 人活着对穷人的意义 金钱至上的社会…穷人活着又有什么意思! 人类为了什么存活于世界,活着的意义是什么? 人么样的人生算是有意义?穷人活着有意义吗?