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 相关文章推荐
禁用键盘上的(全局)指定键兼容iE、Chrome、火狐
May 14 Javascript
JQueryiframe页面操作父页面中的元素与方法(实例讲解)
Nov 19 Javascript
JavaScript阻止事件冒泡示例分享
Dec 28 Javascript
js实现带圆角的多级下拉菜单效果
Aug 28 Javascript
Javascript动画效果(2)
Oct 11 Javascript
常用的几个JQuery代码片段
Mar 13 Javascript
浅析vue中的MVVM实现原理
Mar 04 Javascript
简单了解vue.js数组的常用操作
Jun 17 Javascript
vue 实现微信浮标效果
Sep 01 Javascript
layui 数据表格+分页+搜索+checkbox+缓存选中项数据的方法
Sep 21 Javascript
简述Vue中容易被忽视的知识点
Dec 09 Javascript
openlayers 3实现车辆轨迹回放
Sep 24 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令牌 Token改进版
2008/07/18 PHP
PHP 文件上传源码分析(RFC1867)
2009/10/30 PHP
探讨:如何通过stats命令分析Memcached的内部状态
2013/06/14 PHP
php addslashes 利用递归实现使用反斜线引用字符串
2013/08/05 PHP
phpmailer在服务器上不能正常发送邮件的解决办法
2014/07/08 PHP
CodeIgniter扩展核心类实例详解
2016/01/20 PHP
php面向对象值单例模式
2016/05/03 PHP
php框架CodeIgniter使用redis的方法分析
2018/04/13 PHP
Windows平台PHP+IECapt实现网页批量截图并创建缩略图功能详解
2019/08/02 PHP
将nodejs打包工具整合到鼠标右键的方法
2013/05/11 NodeJs
jquery实现按Enter键触发事件示例
2013/09/10 Javascript
javascript获取flash版本号的方法
2014/11/20 Javascript
jQuery实现带幻灯的tab滑动切换风格菜单代码
2015/08/27 Javascript
Bootstrap每天必学之导航组件
2016/04/25 Javascript
jQuery侧边栏实现代码
2016/05/06 Javascript
jQuery操作iframe中js函数的方法小结
2016/07/06 Javascript
基于jQuery实现表格的查看修改删除
2016/08/01 Javascript
jQuery niceScroll滚动条错位问题的解决方法
2018/02/03 jQuery
vue项目引入字体.ttf的方法
2018/09/28 Javascript
jQuery事件委托代码实践详解
2019/06/21 jQuery
Vue路由的模块自动化与统一加载实现
2020/06/05 Javascript
[02:44]重置世界,颠覆未来——DOTA2 7.23版本震撼上线
2019/12/01 DOTA
[03:12]完美世界DOTA2联赛PWL DAY6集锦
2020/11/05 DOTA
Python实现将xml导入至excel
2015/11/20 Python
python实现画圆功能
2018/01/25 Python
tensorflow 1.0用CNN进行图像分类
2018/04/15 Python
Python使用numpy模块创建数组操作示例
2018/06/20 Python
利用Python脚本批量生成SQL语句
2020/03/04 Python
scrapy结合selenium解析动态页面的实现
2020/09/28 Python
简单整理HTML5的基本特性和语法
2016/02/18 HTML / CSS
Ego Shoes官网:英国时髦鞋类品牌
2020/10/19 全球购物
在对linux系统分区进行格式化时需要对磁盘簇(或i节点密度)的大小进行选择,请说明选择的原则
2012/01/13 面试题
市场安全管理制度
2014/01/26 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers
Python中的tkinter库简单案例详解
2022/01/22 Python
【海涛解说】pis亲自推荐,其实你从来不会玩NW
2022/04/01 DOTA