一.函数调用变量赋值变量的原则
在函数中,调用变量和对变量赋值的原则
①变量的调用
var int = '北京';
function fun1(){
var int = 100;
console.log(int);
function f1(){
var int = '反正不用';
}
}
fun1(); → 100
调用变量的原则
会先在当前作用域中,找是否有这个变量
如果有,就直接使用这个变量
如果没有,去父级作用域寻找这个变量
如果父级作用域有这个变量,就使用这个变量
如果父级作用域没有这个变量,再向上一层寻找
如果找到这个变量,就直接使用
如果所有的作用域都没有这个变量,执行结果是报错
只会向父级作用域找变量,不会向子级作用域找变量
②变量的赋值
var int = '北京';
function fun2 (){
var int = 100;
int = 200;
console.log(int);
}
fun2(); → 200
函数之前的调用,只能调用全局作用域的int
如果全局作用域没有int,则函数内部,赋值语句升级定义的全局变量
调用的就是 函数内部的的变量,int
console.log(int);
变量的赋值原则
先在当前作用域中找变量,如果有,就对这个变量进行赋值
如果当前作用域没有这个变量,去父级作用域找这个变量
如果父级也没有这个变量,再去父级找变量
如果所有的作用域都没有这个变量
赋值语句,升级为定义变量语句,并且定义的是全局作用域变量
不会去子级找变量赋值
记住一句话: 定义变量,一定要写 var 关键词,不管是局部还是全局
图:赋值和调用:1-4
1.只有局部作用域int , 没有全局作用域
2.全局、局部作用于域都有变量
3.有全局int , 没有局部 int
4.局部、全局 都没有 var一个int
5.局部全部都有int 但是函数有参数
var a=10; function fn(a){ a=20; console.log(a) } fn(a); console.log(a)
结果是输出 20 10
图:调用变量:1-3
1.局部 int 存在
2.局部int 没有 ,全局 int 有
3. 局部int ,全局int都没有