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 相关文章推荐
索趣科技的答案
Feb 07 Javascript
JScript分割字符串示例代码
Sep 04 Javascript
简单时间提示DEMO从0开始一直进行计时
Nov 19 Javascript
JavaScript代码复用模式详解
Nov 07 Javascript
微信小程序 Video API实例详解
Oct 02 Javascript
jQuery remove()过滤被删除的元素(推荐)
Jul 18 jQuery
使用JS实现气泡跟随鼠标移动的动画效果
Sep 16 Javascript
JavaScript实现淘宝京东6位数字支付密码效果
Aug 18 Javascript
JavaScript实现英语单词题库
Dec 24 Javascript
JavaScript实现轮播图特效
Apr 10 Javascript
vue监听dom大小改变案例
Jul 29 Javascript
解决vue+elementui项目打包后样式变化问题
Aug 03 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 FPDF类库应用实现代码
2009/03/20 PHP
php自定义session示例分享
2014/04/22 PHP
PHP 二维数组和三维数组的过滤
2016/03/16 PHP
PHP微信支付实例解析
2016/07/22 PHP
基于PHP实现栈数据结构和括号匹配算法示例
2017/08/10 PHP
阿里云的WindowsServer2016上部署php+apache
2018/07/17 PHP
PDO::errorCode讲解
2019/01/28 PHP
thinkphp3.2同时连接两个数据库的简单方法
2019/08/13 PHP
tp5递归 无限级分类详解
2019/10/18 PHP
js模仿html5 placeholder适应于不支持的浏览器
2013/01/13 Javascript
js判断undefined类型示例代码
2014/02/10 Javascript
jquery实现鼠标滑过小图查看大图的方法
2015/07/20 Javascript
js文字横向滚动特效
2015/11/11 Javascript
jquery dialog获取焦点的方法
2017/02/09 Javascript
jQuery实现单击按钮遮罩弹出对话框效果(1)
2017/02/20 Javascript
微信小程序排坑指南详解
2018/05/23 Javascript
JavaScript数组特性与实践应用深入详解
2018/12/30 Javascript
Vue环境搭建+VSCode+Win10的详细教程
2020/08/19 Javascript
[00:37]2016完美“圣”典风云人物:rOtk宣传片
2016/12/09 DOTA
合并Excel工作薄中成绩表的VBA代码,非常适合教育一线的朋友
2009/04/09 Python
python中异常报错处理方法汇总
2016/11/20 Python
使用python进行广告点击率的预测的实现
2019/07/04 Python
PyQt5使用QTimer实现电子时钟
2019/07/29 Python
用python3 urllib破解有道翻译反爬虫机制详解
2019/08/14 Python
Python3+Requests+Excel完整接口自动化测试框架的实现
2019/10/11 Python
window环境pip切换国内源(pip安装异常缓慢的问题)
2019/12/31 Python
openCV提取图像中的矩形区域
2020/07/21 Python
Python调用jar包方法实现过程解析
2020/08/11 Python
vscode+PyQt5安装详解步骤
2020/08/12 Python
信访工作者先进事迹
2014/01/17 职场文书
2014年迎新年活动方案
2014/02/19 职场文书
汉语言文学毕业生自荐信范文
2014/03/24 职场文书
查摆问题整改措施
2014/10/24 职场文书
2015元旦文艺汇演主持稿(开场白+结束语)
2014/12/14 职场文书
优秀教研组申报材料
2014/12/26 职场文书
JS监听Esc 键触发事键
2021/04/14 Javascript