/*
/* function abc(){
// 当在函数中定义变量时,这个变量的作用范围仅在函数中
var a=1;
a++;
console.log(a);
}
abc();
abc(); */
// 执行2遍以后,a的结果仍然是2
// 每次执行函数abc,都会重新将a定义为1
// 函数执行完成,定义在函数中变量a去哪里了?外面为什么调用不到
// 外面调用不到的主要原因是因为a的作用范围仅在函数中,当函数执行完成后a就会自动被销毁
// 我们认为定义在函数外面的变量,叫做全局变量
// 定义在函数里面的变量,叫做局部变量
// 那么局部变量都有哪些?
// 在函数中使用var定义的变量一定是局部变量,参数也是局部变量
/* function abc(){
a=1;//a是全局变量
}
abc();
console.log(a); */
// a是全局变量还是局部变量
// 早期的原生js不需要使用var就可以定义变量,因为他们认为window.变量,
// 所有的变量都是window的属性,而window是可以省略的,所有没有var可以使用
// ,但是到了ES5的后期, 严格要求的代码规范不允许无声明
//就使用变量,没有var是不行的
/* var a=3;
function abc(){
console.log(a);//undefined
// 在当前函数中使用var定义了局部变量,那么在当前函数中任何位置调用的都是
// 局部变量
// 全局变量是无法获取的
var a=5;
// console.log(a,"_________");
// 局部变量不会覆盖全局变量
// window.a就是全局变量a,后面的a是局部变量a
// 在ES6中window.a也不允许使用了
console.log(window.a+a);
}
abc(); */
// console.log(a);//当在函数外打印变量,这个变量肯定就是全局变量
// 定义的局部变量不会改变全局变量
// 我们认为一旦在函数中定义了局部变量,那么这个局部变量名字如果和全局变量名相同
// 全局变量将无法直接在函数中使用了,局部变量的优先级高
/* var a=3;
function abc(){
console.log(a);
window.a=10;
}
abc(); */
// 更改了全局变量a
// 全局变量可以用来存储数据,局部变量一般都是临时使用,执行完成后会被销毁
/* var a=3;
function abc(a){
// a是一个参数,参数也是局部变量
console.log(a);//(1) 7 打印局部变量参数
var a=10;//重新定义局部变量,参数被覆盖
console.log(a);//(2) 10 打印重新定义的局部变量a
}
abc(7);
console.log("a");//(3) "a" 这里的a是双引号引起了,所以这是字符a
console.log(a);//(4) 3 这里的a是变量,因为在函数外打印的变量都是全局变量
// 一旦函数中的局部变量名和全局变量名相同,在函数中使用的变量都是局部变量 */
/* var a=3;
function abc(a){
// 参数就是局部变量,虽然没有使用var,但是一旦是确定为参数,就相当于
// 定义了一个局部变量 var a
console.log(a);//10
a++;
}
abc(10);
console.log(a);//3 */
//
/*
var obj={a:1};
function abc(o){
// 没有更改局部变量
// o.a=10;
// 这里才是真正更改局部变量,更改变量的引用地址
o={a:10};
}
abc(obj);
console.log(obj.a); */
/*
var a=1;
// 命名函数在代码中定义以后,script被执行时,会自动将函数放在堆中
// 并且将函数存储在栈中的全局变量,定义函数全局是最为优先,最早的
// 当代码执行到135行 var a=1时,才开始重新定义变量a,而这个变量a
// 与栈中的全局函数a重名,因此变量a就会覆盖全局函数a
function a(a){
console.log(a);//(2)
var a=3;
console.log(a);//(3)
}
console.log(a);//(1) 1
a(10); //1不是一个函数所有报错
console.log(a);//(4) */
/* var a;
function a(a){
console.log(a);//(2) 10
var a=3;
console.log(a);//(3) 3
}
console.log(a);//(1) 就是函数a
a(10);
a=1; //会将函数a覆盖,变成全局的a=1
console.log(a);//(4) 1 */
</script>
<script>
/* console.log(fn1);
var fn1=10;
// 这样会覆盖上面的fn1,这里覆盖以后,fn1函数
console.log(fn1);
function fn1(){
console.log("aaa");
} */
</script>