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 相关文章推荐
event.X和event.clientX的区别分析
Oct 06 Javascript
js下拉框二级关联菜单效果代码具体实现
Aug 03 Javascript
Jquery焦点与失去焦点示例应用
Jun 10 Javascript
JavaScript比较两个对象是否相等的方法
Feb 06 Javascript
每天一篇javascript学习小结(RegExp对象)
Nov 17 Javascript
jQuery给div,Span, a ,button, radio 赋值与取值
Jun 24 Javascript
JSON 对象未定义错误的解决方法
Sep 29 Javascript
深究AngularJS——ng-checked(回写:带真实案例代码)
Jun 13 Javascript
基于 Bootstrap Datetimepicker 联动
Aug 03 Javascript
Vue2.0 事件的广播与接收(观察者模式)
Mar 14 Javascript
node.js部署之启动后台运行forever的方法
May 23 Javascript
在vue中利用v-html按分号将文本换行的例子
Nov 14 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
php打开远程文件的方法和风险及解决方法
2013/11/12 PHP
ThinkPHP快速入门实例教程之数据分页
2014/07/01 PHP
PHP中file_exists使用中遇到的问题小结
2016/04/05 PHP
php函数mkdir实现递归创建层级目录
2016/10/27 PHP
PHP内置加密函数详解
2016/11/20 PHP
共享自己写一个框架DreamScript
2007/01/20 Javascript
关于文本限制字数的js代码
2007/04/02 Javascript
使用js 设置url参数
2013/07/08 Javascript
js 使FORM表单的所有元素不可编辑的示例代码
2013/10/17 Javascript
js获取下拉列表的值和元素个数示例
2014/05/07 Javascript
jQuery Masonry瀑布流插件使用详解
2014/11/17 Javascript
JS在浏览器中解析Base64编码图像
2017/02/09 Javascript
详解基于webpack搭建react运行环境
2017/06/01 Javascript
详解Vue2中组件间通信的解决全方案
2017/07/28 Javascript
Bootstrap treeview实现动态加载数据并添加快捷搜索功能
2018/01/07 Javascript
js实现div色块碰撞
2020/01/16 Javascript
nodejs nedb 封装库与使用方法示例
2020/02/06 NodeJs
[00:17]DOTA2荣耀之路5:It’s a disastah!
2018/05/28 DOTA
python基础教程之简单入门说明(变量和控制语言使用方法)
2014/03/25 Python
解决Python字典写入文件出行首行有空格的问题
2017/09/27 Python
快速了解python leveldb
2018/01/18 Python
python组合无重复三位数的实例
2018/11/13 Python
Pytorch中Tensor与各种图像格式的相互转化详解
2019/12/26 Python
matlab灰度图像调整及imadjust函数的用法详解
2020/02/27 Python
Python reques接口测试框架实现代码
2020/07/28 Python
pandas map(),apply(),applymap()区别解析
2021/02/24 Python
CSS3近阶段篇之酷炫的3D旋转透视
2016/04/28 HTML / CSS
娇韵诗法国官网:Clarins法国
2019/01/29 全球购物
New Balance比利时官方网站:购买鞋子和服装
2021/01/15 全球购物
String s = new String(“xyz”);创建了几个String Object?
2015/08/05 面试题
社区清明节活动总结
2014/07/04 职场文书
危货运输企业安全生产责任书
2014/07/28 职场文书
银行授权委托书格式
2014/10/10 职场文书
2015年学校后勤工作总结
2015/04/08 职场文书
Python基础之赋值,浅拷贝,深拷贝的区别
2021/04/30 Python
欧元符号 €
2022/02/17 杂记