把一段字符串倒过来的三种方法
1. let str = 'abc';
let s = ''
for(var i=str.length-1;i>=0;i--){
s+=str[i]
}
console.log(s);
2.
let str = 'abc';
reverse把数组的顺序倒过来
console.log( str.split('').reverse().join('') )
3.
let arr = [];
for(var i in str){
arr.unshift(str[i])
}
console.log( arr.join('') );
全局变量
/* 全局变量在页面关闭后被删除 */
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);
最外层函数和在最外层函数外面定义的变量拥有全局作用域
所有未定义直接赋值的变量自动声明为拥有全局作用域 */
c='ccc'
function fn2(){
fn1();
console.log(c);
console.log(b);
console.log(a);
console.log(window.top);
}
fn2()
作用域链
可以通过代码访问的属性和一系列仅供JavaScript引擎访问的内部属性该内部属性包含了函数被创建的作用域中对象的集合,这个集合被称为函数的作用域链。
作用域链 首先会在当前的作用域内去变量对应的值,如果找不到,会向上一层一层的去寻找 。
闭包
一个函数就可以理解为一个闭包
function f1() {
alert(1);
}
闭包的用途
可以读取函数内部的变量
让这些变量的值始终保持在内存中
function fn1(){
let a = 1
代码中的内部函数(fn2)就是闭包
可以把闭包简单理解成"定义在一个函数内部的函数"
是将函数内部和函数外部连接起来的一座桥梁
function fn2(){
闭包就是能够读取其他函数内部变量的函数
document.write(a);
}
return fn2;
}
console.log( fn1() )
通过这种方式 就可以得到fn1的局部变量a的值
fn1()()
function fn(){}
console.log(fn);