JAVAScript中的作用域与new,this,var关键字
来源:互联网 发布:手机软件数据备份 编辑:程序博客网 时间:2024/04/25 18:21
最近刚学习JavaScript,从JAVA转过,感觉确实有点不石更啊。。。
贴段代码看看能做对呗:
两次调用,四次弹出框,结果按顺序为:
0,300,0,0
如果TODO 换为 temp1=0的话,四次结果为:
undefined,0,0,0
基础理论我不懂,只按照自己的理解说:
1. 声明变量是否带var关键字:
简单地说,带var的话表示当前作用域的变量(感觉变量和属性还有点区别,window对象里面除外),不带var的话表示声明一个全局变量(属于window对象)。
注意如果在某个自定义对象中声明变量时,这个变量无法被this关键字访问到,this关键字只能访问属性,而并不是变量,并且在作用域外是无法访问的,除非使用闭包。如
结果为undefined, 0
2.this关键字表示当前对象,这个相关文章也很多了,注意的就是“当前对象”到底指向的是谁,如果出现问题的话很有可能是默认的指向window了,需要进行改变。
3.new关键字新建一个对象,并作为当前的操作对象,这时候this关键字指向的就是当前新建的这个对象。
按照上面思路反观最上面的例子:
JSClass可以作为函数,也可以作为对象(具体用语分不大清了,勿喷),外围的window声明了temp1,里面JSClass声明了自己的temp1属性,所以这两个可以完全区分。
new JSClass; //语句一
表示当前对象为JSClass,所以alert(this.temp1)就是0; 而alert(temp1);则是寻找当前作用域的temp1这一变量,结果发现当前作用域没这个变量,于是乎就自动获取外围作用域的temp1,所以输出为300.
JSClass(); //语句二
表示当前对象为Window,注意这时候要先执行一句函数里面的“var temp1=0;”所以alert(this.temp1)就是0,alert(temp1);也是0, 好像对于window来说,声明一个变量就算作window的属性之一了。
尽管上面例子平时不会出现,但是多看看绝对有助于理解这三个关键字,所以平时自己写JS时候尽量不要使用相同的变量或属性名,避免混淆。
总之,new出来的对象会改变当前指向的对象;var是在当前作用域声明一个变量,如果不带var,则表示声明一个全局变量(隶属于window);this是当前对象的操作,会获取对象的属性,而不是变量,函数的调用中,this指向window对象,对当前对象声明一个属性要使用this。
贴段代码看看能做对呗:
<script type="text/javascript">var temp1=300; //windowfunction JSClass(){this.temp1=0; //TODO 如果改成 ‘temp1=0’ 有什么不同内?alert(this.temp1); alert(temp1);}new JSClass; //语句一 JSClass(); //语句二</script>
两次调用,四次弹出框,结果按顺序为:
0,300,0,0
如果TODO 换为 temp1=0的话,四次结果为:
undefined,0,0,0
基础理论我不懂,只按照自己的理解说:
1. 声明变量是否带var关键字:
简单地说,带var的话表示当前作用域的变量(感觉变量和属性还有点区别,window对象里面除外),不带var的话表示声明一个全局变量(属于window对象)。
注意如果在某个自定义对象中声明变量时,这个变量无法被this关键字访问到,this关键字只能访问属性,而并不是变量,并且在作用域外是无法访问的,除非使用闭包。如
function JSClass(){var temp1=0;alert(this.temp1); alert(temp1);}new JSClass;
结果为undefined, 0
2.this关键字表示当前对象,这个相关文章也很多了,注意的就是“当前对象”到底指向的是谁,如果出现问题的话很有可能是默认的指向window了,需要进行改变。
3.new关键字新建一个对象,并作为当前的操作对象,这时候this关键字指向的就是当前新建的这个对象。
按照上面思路反观最上面的例子:
JSClass可以作为函数,也可以作为对象(具体用语分不大清了,勿喷),外围的window声明了temp1,里面JSClass声明了自己的temp1属性,所以这两个可以完全区分。
new JSClass; //语句一
表示当前对象为JSClass,所以alert(this.temp1)就是0; 而alert(temp1);则是寻找当前作用域的temp1这一变量,结果发现当前作用域没这个变量,于是乎就自动获取外围作用域的temp1,所以输出为300.
JSClass(); //语句二
表示当前对象为Window,注意这时候要先执行一句函数里面的“var temp1=0;”所以alert(this.temp1)就是0,alert(temp1);也是0, 好像对于window来说,声明一个变量就算作window的属性之一了。
尽管上面例子平时不会出现,但是多看看绝对有助于理解这三个关键字,所以平时自己写JS时候尽量不要使用相同的变量或属性名,避免混淆。
总之,new出来的对象会改变当前指向的对象;var是在当前作用域声明一个变量,如果不带var,则表示声明一个全局变量(隶属于window);this是当前对象的操作,会获取对象的属性,而不是变量,函数的调用中,this指向window对象,对当前对象声明一个属性要使用this。
0 0
- JAVAScript中的作用域与new,this,var关键字
- javascript中作用域与关键字this
- javascript中的var关键字
- js中的this、new关键字、作用域和作用域链
- javascript作用域及this关键字
- javaScript中的this作用域
- 《作用域与闭包:this,var,(function () {})》
- 《作用域与闭包:this,var,(function () {})》
- Javascript中的this关键字
- JavaScript中的this关键字
- JavaScript 中的this 关键字
- Javascript中的关键字this
- JavaScript中的this关键字
- Javascript中的this关键字
- JavaScript中的this关键字
- JavaScript中的this关键字
- JavaScript中的this关键字
- Javascript中的this关键字
- MySQL Front很讨厌的 Row XX doesn't contain data for all columns错误
- JAVAScript的三种消息框
- 将DevOps纳入企业环境引发的思考
- document.write()与setTimeout()
- 转:关于js中"window.location."、"location."、"parent.location."、"top.location用法
- JAVAScript中的作用域与new,this,var关键字
- Linux IPC
- Which tool should be used to find out a "jmp esp"
- CSS框架
- POJ2182 Lost Cows 线段树单点更新
- 股票当日委托未成交第二天还会有效吗?
- CAS 3.2.0 client 设置
- IE6offsetWidth与offsetHeight为0的问题
- ant脚本学习