我需要了解一些JavaScript中作用域的信息。我知道它支持词法(静态)作用域,但是它也支持动态作用域吗?
关于JavaScript中的作用域
原标题:
最佳回答
我认为你感到困惑是因为JavaScript使用静态作用域,但是它是在函数级别上,而不是像常规结构化语言一样在块级别上。
var foo = "old";
if (true) {var foo = "new";}
alert (foo == "new")
So be careful, blocks don t make scope! That s why you sometimes see loops with functions inside just to enable variables whose scope is inside an iteration:
functions = [];
for(var i=0; i<10; i++) {
(function(){
var local_i = i;
functions[local_i] = function() {return local_i;}
})();
}
functions[2]() // returns 2 and not 10
问题回答
据我所了解,Javascript有两种变量,全局变量和局部变量。但是,假设我们有一个名为x的变量,它被定义为全局变量,并在引用x的范围的静态父级中定义。在这种情况下,x获取全局变量的值。因此,全局变量优先于局部变量。而且,当没有任何全局变量时,x通过静态链找到申明,这使我认为Javascirpt是一种静态作用域语言。
我上面说的对吗?
相关问题
热门标签
- winforms
- combobox
- fogbugz
- java
- date
- internationalization
- asp.net
- iis
- url-rewriting
- urlrewriter
- c#
- enums
- ocaml
- haxe
- algorithm
- string
- viewstate
- .net
- c++
- c
- symbol-table
- mysql
- database
- postgresql
- licensing
- migration
- vb.net
- vb6
- declaration
- vb6-migration
- python
- psycopg2
- backup
- vmware
- virtualization
- gnu-screen
- authentication
- desktop
- excel
- xll
- cultureinfo
- regioninfo
- oracle
- client
- session
- download
- html
- virtual
- constructor
- scenarios
- perl
- full-text-search
- javascript
- ajax
- testing
- oop
- inheritance
- vim
- encapsulation
- information-hiding