var a = "a"; b = "b"; function test() { console.log(a+"~~"+b+"</br>"); //js预解析,会先做变量的初始化 console.log(window.a+"~~"+window.b+"</br>"); var a ="A";//这里的a是局部变量啊 b = "B";//b是全局变量,这里是改变的全局变量 console.log(a+"~~"+b+"</br>"); console.log(window.a+"~~"+window.b+"</br>"); } test(); console.log(a+"~~"+b+"</br>");//外面就都是全局变量啊 console.log(window.a+"~~"+window.b+"</br>");
如果是这样写呢?// 注意外面没有定义全局变量 function () { myvar = 1; alert(myvar); var myvar = 2; } alert(myvar);两次alert分别是"1"和Error, myvar没有定义。 也就是说,函数体内一旦用var声明变量,在整个体内都是有效的,可以赋值(虽然看起来像声明一个全局变量),可以使用。注意假设去掉var这一句,那么myvar就是一个全局变量,而最后一个alert也是有效的。
1、“var x = 1”和“x = 1”的方式申明的都是全局变量。
2、前者标记显式申明,后者直接隐式申明,它们都由JS引擎的内建方式保存,并建立指向内部存储之引用,且存取性能是一样的。
3、两者的区别主要表现在安全性能方面:一旦声明,前者可修改赋值但不可人为消失,后者可修改赋值并可以随时删除。示例代码“var x = 1;alert(delete x)”结果为 “false”,而示例代码“x = 1;alert(delete x)”结果为 “true”。
b = "b";
function test()
{
console.log(a+"~~"+b+"</br>"); //js预解析,会先做变量的初始化
console.log(window.a+"~~"+window.b+"</br>");
var a ="A";//这里的a是局部变量啊
b = "B";//b是全局变量,这里是改变的全局变量
console.log(a+"~~"+b+"</br>");
console.log(window.a+"~~"+window.b+"</br>");
}
test();
console.log(a+"~~"+b+"</br>");//外面就都是全局变量啊
console.log(window.a+"~~"+window.b+"</br>");
function ()
{
myvar = 1;
alert(myvar);
var myvar = 2;
}
alert(myvar);两次alert分别是"1"和Error, myvar没有定义。
也就是说,函数体内一旦用var声明变量,在整个体内都是有效的,可以赋值(虽然看起来像声明一个全局变量),可以使用。注意假设去掉var这一句,那么myvar就是一个全局变量,而最后一个alert也是有效的。
不使用var 声明,那么就会被默认添加 到window全局环境中
javascript的变量作用域不是{}而是 function(){} 也就是for循环体、while循环体等里面声明的变量在整个function内都是可见的。
2.
var 是声明变量。
在浏览器里面,window对象的属性就是全局变量。
在function内部,var的变量是局部变量,没有var的变量,被默认当做全局变量。