Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript函数级作用域_Javascript_Scope_Language Design - Fatal编程技术网

Javascript函数级作用域

Javascript函数级作用域,javascript,scope,language-design,Javascript,Scope,Language Design,这只是一种好奇。但这是我想知道的 我知道Javascript 1.7支持带有let关键字的块作用域 但是为什么Javascript最初设计为函数级作用域而不是块作用域?一个合理的猜测(但只是猜测)可能是该语言最早的迭代没有var关键字,而是依赖于分配给它时隐式创建的变量。对于简单的脚本语言来说,这是很常见的——许多脚本语言在成熟并开始用于大型项目时必须改进一些显式声明机制。在此假设下,为了使代码 if( bla bla bla ) { a = 24 ; } else { a = blop

这只是一种好奇。但这是我想知道的

我知道Javascript 1.7支持带有
let
关键字的块作用域

但是为什么Javascript最初设计为
函数级
作用域而不是
块作用域

一个合理的猜测(但只是猜测)可能是该语言最早的迭代没有
var
关键字,而是依赖于分配给它时隐式创建的变量。对于简单的脚本语言来说,这是很常见的——许多脚本语言在成熟并开始用于大型项目时必须改进一些显式声明机制。在此假设下,为了使代码

if( bla bla bla ) {
  a = 24 ;
} else {
  a = blop.blop();
}
alert(a);
如果
a
的隐式声明被大括号捕获,而不是在警报中可见,则不会这样做。因此,功能级别的范围


现在想象一下,在添加
var
时,函数级范围的假设已经在语言的规范和实现中根深蒂固……

为什么不呢?我们怎么知道最初的设计者和实现者在想什么?因为他们必须从某个地方开始?@deceze所以从哪里开始并不重要。重要的是你要开始!您可以直接向道格拉斯·克罗克福德发送电子邮件:douglas@crockford.com问他,为什么是道格?我更倾向于给Brendan Eich发电子邮件,他是语言的创造者(大约两周之内)@Markholm我喜欢猜测:)