JavaScript中的关键字"VAR"使用详解 分享


Posted in Javascript onJuly 31, 2013

看看下面这几个例子的结果就知道问题了:
这三个例子的执行结果分别是:

Results#region Results
No.1
0
undefined
No.2
0
1
No.3
0
undefined
#endregion

原来JavaScript的变量也是有作用域的,只是它非常的笼统,就分为全局变量和函数变量。在第二个例子中得到0和1,是因为所有的变量都是全局变量,而且那个语句块一共就定义了两个变量。而第一个第三的函数外全局变量,确实说明var关键字有没有都没有关系。而函数内的var关键字就很关键了,它说明第二个var01是函数内的变量,所以在初始化var01前输出自然就是'undefined'了。
那么函数里面是不是就屏蔽掉了全局的var01了呢?我们知道在C/C++可以使用::去访问全局变量,那么JavaScript可不可以呢?这里其实我们只要明白了全局变量到底是什么东西,就好弄了。原来全局变量都是动态添加到Window对象的实例window上的属性而以,所以我们只要在函数内用:document.write(window.var01);就可以取到其值1了。同时在这个上下文中,function内的this也是指向的window实例,我们也可以把引用写成:this.var01。
顺便说一下,重看JScript教程时,它说变量只能是[a-zA-Z_]+[a-zA-Z0-9_]*格式,可是'$'却也可以作为变量名字符,而且还可以用在开头,比如:$1234,更甚至于:$$$ 也是合法的变量名,faint。
我想知道是不是.在调用一个函数时,程序执行顺序会先检查函数内部变量中,有没有关键字var. 然后中再根据检查结果给不同的变量付予不同的作用域和变量值.因为我看到在这三个函数中,var01变量都是在输出语句之后.
function get_global_var(___name) 
{ 
return eval(___name); 
} 
function set_global_var(___name,___value) 
{ 
eval(___name+"=___value"); 
} 
var aa=11; 
Test(); 
WScript.Echo(aa);//22 
function Test() 
{ 
var aa=33; 
WScript.Echo(get_global_var("aa"));//11 
set_global_var("aa",22); 
WScript.Echo(get_global_var("aa"));//22 
WScript.Echo(aa);//33 
}

在上面的例子中this从来就没有指过Test,而一直都是WScript的实例。
如果我们写一个语句:var test = new Test(); 这时Test里的this就是指的Test的一个实例了,这个实例中如果要使用Global的变量,Lostinet给出的是一个方法。
不过最简单还是把global传入对象,这样定义Test:
function Test(global) 
{ 
// ... 
}

然后这样创建实例:var test = new Test(this); 就可以在Test实例中使用global的对象和属性了。
是不是这样,在new的实例中,this就指实例,否则都指WScript?如果这样的话,换了脚本引擎,是不是情况又会不同?这个是标准吗?
new constructor[(arguments)];
new 运算符执行下面的任务:
·创建一个没有成员的对象。
·为那个对象调用构造函数,传递一个指针给新创建的对象作为 this 指针。
·然后构造函数根据传递给它的参数初始化该对象。
要注意的是即使当前作用域内没有调用new,但可能在其父作用域里是调用了new的,所以“在new的实例中,this就指实例,否则都指WScript?”,前半句对,而后半句不一定。
Javascript 相关文章推荐
javascript CSS画图之基础篇
Jul 29 Javascript
Javascript Function对象扩展之延时执行函数
Jul 06 Javascript
javascript 星级评分效果(手写)
Dec 24 Javascript
jQuery替换字符串(实例代码)
Nov 13 Javascript
JavaScript中用sort()方法对数组元素进行排序的操作
Jun 09 Javascript
Bootstrap 3 按钮标签实例代码
Feb 21 Javascript
vue按需引入element Transfer 穿梭框
Sep 30 Javascript
一次记住JavaScript的6个正则表达式方法
Feb 22 Javascript
layer.confirm点击第一个按钮关闭弹出框的方法
Sep 09 Javascript
浅谈微信小程序列表埋点曝光指南
Oct 15 Javascript
Vue+Vuex实现自动登录的知识点详解
Mar 04 Javascript
vue 里面的 $forceUpdate() 强制实例重新渲染操作
Sep 21 Javascript
JavaScript 和 Java 的区别浅析
Jul 31 #Javascript
javascript检查表单数据是否改变的方法
Jul 30 #Javascript
JS 对输入框进行限制(常用的都有)
Jul 30 #Javascript
JS无限极树形菜单,json格式、数组格式通用示例
Jul 30 #Javascript
js中widow.open()方法使用详解
Jul 30 #Javascript
Extjs NumberField后面加单位实现思路
Jul 30 #Javascript
Js中获取frames中的元素示例代码
Jul 30 #Javascript
You might like
PHP4引用文件语句的对比
2006/10/09 PHP
php连接oracle数据库及查询数据的方法
2014/12/29 PHP
js传参数受特殊字符影响错误的解决方法
2013/10/21 Javascript
JS图像无缝滚动脚本非常好用
2014/02/10 Javascript
js面向对象编程之如何实现方法重载
2014/07/02 Javascript
javascript使用正则获取url上的某个参数
2014/09/04 Javascript
node.js中的forEach()是同步还是异步呢
2015/01/29 Javascript
jQuery菜单插件superfish使用指南
2015/04/21 Javascript
浅析javascript异步执行函数导致的变量变化问题解决思路
2016/05/13 Javascript
.net MVC+Bootstrap下使用localResizeIMG上传图片
2017/04/21 Javascript
jQuery插件DataTables分页开发心得体会
2017/08/22 jQuery
js实现1,2,3,5数字按照概率生成
2017/09/12 Javascript
vue 系列——vue2-webpack2框架搭建踩坑之路
2017/12/22 Javascript
使用Vuex实现一个笔记应用的方法
2018/03/13 Javascript
详解React中传入组件的props改变时更新组件的几种实现方法
2018/09/13 Javascript
微信小程序 腾讯地图SDK 获取当前地址实现解析
2019/08/12 Javascript
Vue向后台传数组数据,springboot接收vue传的数组数据实例
2020/11/12 Javascript
python实现的DES加密算法和3DES加密算法实例
2015/06/03 Python
Python编程求质数实例代码
2018/01/31 Python
详解Django的CSRF认证实现
2018/10/09 Python
皮尔·卡丹巴西官方商店:Pierre Cardin
2017/07/21 全球购物
英国在线自行车店:Merlin Cycles
2018/08/20 全球购物
Exoticca英国:以最优惠的价格提供豪华异国情调旅行
2018/10/18 全球购物
CK加拿大官网:Calvin Klein加拿大
2020/03/14 全球购物
应届生的求职推荐信范文
2013/11/30 职场文书
计算机操作自荐信
2013/12/07 职场文书
2014世界杯球队球队口号
2014/06/05 职场文书
低碳生活的宣传标语
2014/06/23 职场文书
行政专员岗位职责说明书
2014/07/30 职场文书
2014年平安创建工作总结
2014/11/24 职场文书
赤壁观后感(2)
2015/06/15 职场文书
格列夫游记读书笔记
2015/07/01 职场文书
Python django中如何使用restful框架
2021/06/23 Python
Python常用配置文件ini、json、yaml读写总结
2021/07/09 Python
浅谈GO中的Channel以及死锁的造成
2022/03/18 Golang
cypress测试本地web应用
2022/06/01 Javascript