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 相关文章推荐
在修改准备发的批量美化select+可修改select时,在非IE下发现了几个问题
Jan 09 Javascript
jQuery EasyUI API 中文文档 - ComboBox组合框
Oct 07 Javascript
IE6浏览器下resize事件被执行了多次解决方法
Dec 11 Javascript
JS来动态的修改url实现对url的增删查改
Sep 05 Javascript
使用vue实现点击按钮滑出面板的实现代码
Jan 10 Javascript
js对象实例详解(JavaScript对象深度剖析,深度理解js对象)
Sep 21 Javascript
vue2+el-menu实现路由跳转及当前项的设置方法实例
Nov 07 Javascript
vue实现文件上传功能
Aug 13 Javascript
Vue通过WebSocket建立长连接的实现代码
Nov 05 Javascript
PHP 502bad gateway原因及解决方案
Nov 13 Javascript
为什么推荐使用JSX开发Vue3
Dec 28 Vue.js
vue里使用create, mounted调用方法
Apr 26 Vue.js
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
第十二节--类的自动加载
2006/11/16 PHP
PHP中的类-什么叫类
2006/11/20 PHP
PHP+.htaccess实现全站静态HTML文件GZIP压缩传输(一)
2007/02/15 PHP
在Mac OS上编译安装Nginx+PHP+MariaDB开发环境的教程
2016/02/23 PHP
聊聊 PHP 8 新特性 Attributes
2020/08/19 PHP
JQuery 国际象棋棋盘 实现代码
2009/06/26 Javascript
也说JavaScript中String类的replace函数
2011/09/22 Javascript
JQuery性能优化的几点建议
2014/05/14 Javascript
node.js学习总结之调式代码的方法
2014/06/25 Javascript
JavaScript中的逻辑判断符&&、||与!介绍
2014/12/31 Javascript
全系IE支持Bootstrap的解决方法
2015/10/19 Javascript
深入浅析react native es6语法
2015/12/09 Javascript
jQuery 3.0 的变化及使用方法
2016/02/01 Javascript
javascript拖拽应用实例
2016/03/25 Javascript
jQuery使用deferreds串行多个ajax请求
2016/08/22 Javascript
Javascript 实现微信分享(QQ、朋友圈、分享给朋友)
2016/10/21 Javascript
原生js验证简洁注册登录页面
2016/12/17 Javascript
JS获取一个表单字段中多条数据并转化为json格式
2017/10/17 Javascript
解决vue 退出动画无效的问题
2020/08/09 Javascript
maptalks+three.js+vue webpack实现二维地图上贴三维模型操作
2020/08/10 Javascript
疯狂上涨的Python 开发者应从2.x还是3.x着手?
2017/11/16 Python
Python根据指定日期计算后n天,前n天是哪一天的方法
2018/05/29 Python
python实现排序算法解析
2018/09/08 Python
python通过robert、sobel、Laplace算子实现图像边缘提取详解
2019/08/21 Python
Python实现图像去噪方式(中值去噪和均值去噪)
2019/12/18 Python
人资专员岗位职责
2014/04/04 职场文书
大学生党员批评与自我批评
2014/09/28 职场文书
党的群众路线查摆剖析材料
2014/10/10 职场文书
2014年审计工作总结
2014/11/17 职场文书
5.12护士节活动总结
2015/02/10 职场文书
面试通知短信
2015/04/20 职场文书
奖金申请报告模板
2015/05/15 职场文书
研讨会致辞
2015/07/31 职场文书
个人售房合同协议书
2016/03/21 职场文书
python ansible自动化运维工具执行流程
2021/06/24 Python
Javascript的promise,async和await的区别详解
2022/03/24 Javascript