全局变量:在函数外声明的变量,网页上的所有脚本和函数都能访问它
局部变量:在函数内部声明的变量(必须使用var)
全局变量 具有全局的作用域
let arr = [];
局部变量 具有局部作用
arr只有变成全局的才不会被重复定义
let arr = [];
全局变量在页面关闭后被删除
let str = '111'
function fn(){
在函数里面没有使用let 或者 var
a会变成一个全局变量
局部变量:在函数内部声明的变量(必须使用var)
只能在函数内部访问它
var a = '123'
console.log(a);
}
fn();
console.log(a);
可以在不同的函数中使用名称相同的局部变量
function fn2(){
var a = '456';
console.log(a);
局部变量在函数运行以后被删除
}
fn2();
console.log(str);
作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期
变量的作用域有两种
全局作用域
局部作用域
a是全局变量具有全局作用域
let a = 123;
function fn1(){
和全局作用域相反,局部作用域一般只在固定的代码片段内可访问到
b是局部变量 具有局部作用域
let b = '222'
console.log(c);
console.log(a);
}
fn1()
console.log(b);
最外层函数和在最外层函数外面定义的变量拥有全局作用域
所有未定义直接赋值的变量自动声明为拥有全局作用域
所有window对象的属性拥有全局作用域
window对象的内置属性都拥有全局作用域,
例如window.name、window.location、window.top等等
可以通过代码访问的属性和一系列仅供JavaScript引擎访问的内部属性该内部属性
包含了函数被创建的作用域中对象的集合,这个集合被称为函数的作用域。
作用域链 首先会在当前的作用域内去变量对应的值
如果找不到,会向上一层一层的去寻找 。
【案例】
let str = 'abc';
第一种方法
let s = ''
for(var i=str.length-1;i>=0;i--){
s+=str[i]
}
console.log(s);
第二种方式
reverse把数组的顺序倒过来
console.log( str.split('').reverse().join('') )
第三种方式
let arr = [];
for(var i in str){
arr.unshift(str[i])
}
console.log( arr.join('') );