var定义的变量是全局变量或者函数变量。
let定义的变量是块级的变量。
例如:
while(1){
let let1 = 2
var var1 = 2
}
alert(let1) //不可访问
alert(var1) //可以访问
也就是说,let只对它所在的最内侧块内有效,而var的范围至少是一个函数之内。
问题一:不知道楼主有没有接触过jquery jquery里边有一个特别典型的例子能说明用_this的作用
$("#btn").click(function(){
var _this = this//这里this和_this都代表了"#btn"这个对象
$(".tr").each(function(){
this//在这里this代表的是每个遍历到的".tr"对象
_this//仍代表"#btn"对象
})
})
这种情况就是在一个代码片段里this有可能代表不同的对象,而编码者希望_this代表最初的对象
问题2:
其实并没有全部使用_this
但是据我所看,应该没有任何区别的,楼主的代码里用_this可能只是为了编码规范吧
一、js全局变量和局部变量
1、全局变量和它的作用域
全局变量是指在程序开头的说明部分定义和说明的量。它的作用域分为两种情况:
1)在全局变量和局部变量不同名时,其作用域是整个程序。
2)在全局变量和局部变量同名时,全局变量的作用域不包含同名局部变量的作用域。
2、局部变量和它的作用域
凡是在子程序内部使用的变量,必须在子程序中加入说明。这种在子程序内部说明的变量称为局部变量。局部变量的作用域是其所在的子程序。形式参数也只能在子程序中有效。因此也属于局部变量。局部变量的作用域分为两种情况:
1)当外层过程序的局部变量名和嵌套过程中的局部变量不同名时,外层过程的局部变量作用域包含嵌套过琛。
2)当外层过程的局部变量名和嵌套过程内的局部变量名同名时,外层局部变量名的作用域不包含此过程。
二、js定义变量需要注意以下内容:
1、Javascript的变量的scope是根据方法块来划分的(也就是说以function的一对大括号{ }来划分);切记,是function块,而for、while、if块并不是作用域的划分标准
2、Javascript在执行前会对整个脚本文件的声明部分做完整分析(包括局部变量),从而确定实变量的作用域
3、当全局变量跟局部变量重名时,局部变量的scope会覆盖掉全局变量的scope,当离开局部变量的scope后,又重回到全局变量的scope
三、js定义变量时,var和this的区别
1、var的规则是: 使用var声明变量就是内部变量, 否则就是先调用全局变量, 不管多少层函数
2、this的规则是: method函数里的this永远指向自身, 普通函数的this永远指向DOMWindow
附件为var和this区别的示例代码!