关于对javascript的局部变量以及全局变量作用域的追踪
来源:互联网 发布:学生管理系统c语言 编辑:程序博客网 时间:2024/06/11 18:22
今天看了一段关于require.js的AMD规范中的shim的使用方式和实现原理,但开局讲到javascript中对全局变量的定义方法,其方法有三种:
eg1: 直接利用var申明
var a="hello world1"; function A(){ alert(a); }
eg2: 不使用var,直接给定义变量,隐式的声明了全局变量
b="hello world2"function B(){ alert(b);}
这种方法,即使该变量是在一个function内,当该function被执行后它变成了全局变量 —- 但是function不执行它就不被其他function知道,所以最好定义在function外。
eg3:使用window.变量名定义为全局变量,但是注意:调用时候建议写上window.变量名,当然也可以不写;我们常用的document.getXXX的document对象就是window的
window.c="hello world3";function C(){ alert(window.c);}
在涉及全局以及局部变量的作用域时,我看到这样一片文章,代码如下:
var a=10;function test(){ a=100; console.log(a); console.log(this.a); var a; console.log(a);}test();output: 100,10,100
注:JavaScript在执行前会对整个脚本文件的声明部分做完整分析(包括局部变量),从而确定变量的作用域,所以在函数test执行前,由于第6行声明了局部变量a,所以函数内部的a都指向已经声明的局部变量,所以第4行输出100。第5行输出this.a,我们都知道,函数内部的this指针指向的是函数的调用者,在这里函数test被全局对象调用,所以this指针指向全局对象(这里即window),所以this.a = window.a,一开始生命了全局变量a=10,所以第5行输出结果为10。第7行输出结果为100,因为局部变量a在第3行已经被赋值了100,所以直接输出局部变量a的值。
var a=100;function test(){ console.log(a); var a=10; console.log(a);}test();output: undefined ,10
注:看了第1个例子,可能有同学会认为输出结果是10 10,但是结果却不是10 10,为什么呢?仔细看第1个例子解析的第一句话,Javascript在执行前会对整个脚本文件的声明部分做完整分析(包括局部变量),但是不能对变量定义做提前解析,在这个函数中,执行第3行前,可以认为已经声明了变量a,但是并没有定义(这里即赋值),所以第3行输出结果为undefined,执行第4行a =10后,变量a的值就为10,所以第5行输出结果为10。
var a=100;function test(){ console.log(a); a=10; console.log(a);}test();console.log(a);output:100 , 10 ,10
注:我们知道在函数内部,一般用var声明的为局部变量,没用var声明的一般为全局变量,在test函数内,a=10声明了一个全局变量,所以第3行的a应该输出全局变量的值,而在函数执行之前已经声明过一个全局变量并赋值100,所以这里第上输出100。第4行给全局变量a 重新赋值10,所以全局变量a的值变成10,所以第5行输出10。而在函数test外部,第8行输出全局变量a的值,因为全局变量被重新赋值为10,所以输出结果即为10。
转: http://blog.csdn.net/longwenjunjie/article/details/48163293
- 关于对javascript的局部变量以及全局变量作用域的追踪
- 局部变量和全局变量的作用域
- 【JavaScript】(5)匿名函数的定义方式、变量的作用域(局部变量,全局变量)
- 局部变量,全局变量,静态变量的作用域,生命期?
- 9、变量的作用域--(全局变量和局部变量)
- 一个关于静态局部变量以及全局变量的例子
- Javascript:关于JS的全局变量跟局部变量 经典案例!!!
- 认清JavaScript和JAVA全局变量和局部变量的作用域
- 认清JavaScript和JAVA全局变量和局部变量的作用域
- C++的局部变量和全局变量的作用域
- 局部变量和全局变量的作用域的首次理解
- 关于局部变量,全局变量,作用域,生命期的概念,程序内存分析
- js全局变量和局部变量的作用域分析
- c++中全局变量,全局静态变量,局部静态变量,局部变量的作用域和生命周期
- 全局变量和局部变量以及&的问题
- [第五章]函数对变量的作用:局部变量和全局变量
- JavaScript的全局变量和局部变量
- javascript的全局变量跟局部变量解析
- C语言基础-C语言知识框架
- 数据结构与算法——单链表的基本操作
- 怎么完全备份ORACLE数据库,并在另一台电脑上恢复
- Oracle ASM安装和配置
- java中class文件基本结构
- 关于对javascript的局部变量以及全局变量作用域的追踪
- Number of Parallelograms CodeForces
- luci+ricci构建集群
- Java连接服务器MySQL
- 数据结构与算法(32)——字符串算法
- [加速]为conda添加国内镜像
- 无法实例化xxx对象
- python3_列表
- 递归