区别
关系
1. 只有对象才有属性(object.name)
2. 字符串不是对象
那么请问为什么可以写 'string'.length?
1. alert(object) 会什么得到 "[object Object]
2. toString() 有什么用?
array.sort()
array.sort(compare)
array.splice()
array.join('-')
string.split()
string.substring()
var v = 1;
function f(){
console.log(v);
}
f()
// 1
function f(){
var v = 1;
}
v
// ReferenceError: v is not defined
变量不是哪里都能用的
全局变量(跨文件)
局部变量(只能在函数内部访问)
应用
var v = 1;
function f(){
var v = 2;
console.log(v);
}
f()
// 2
v
// 1
var a = 1;
var x = function (){
console.log(a);
};
function f(){
var a = 2;
x();
}
f() // 1
函数能独立出一个作用域
函数里面可以访问函数外面
var v = 1;
function f(){
var v = 2;
console.log(v);
}
f()
// 2
v
// 1
var a = 1;
var x = function (){
console.log(a);
};
function f(){
var a = 2;
x();
}
f() // 1
函数能独立出一个作用域
函数里面可以访问函数外面
!function(){
var a = 1
console.log(a)
}()
!function(){
var a = 2
console.log(a)
}()
var items = document.getElementsByTagName('li')
for(var i=0; i<items.length; i++){
items[i].onclick = function(){
console.log(i)
}
}
立即执行函数(名词)
闭包、异步
callback - call back
function doSomething(xxx){
console.log('some thing')
xxx('success')
}
doSomething(function(result){
console.log(result)
})
console.log(1)
console.log(2)
console.log(3)
setTimeout(callback,time)
一段时间后将 callback 放入执行清单
JS 引擎做完手头的事情才会去看执行清单
console.log(1)
setTimeout(function(){
console.log(2)
},0)
console.log(3)
function doSomething(callback){
console.log('some thing')
callback('success')
}
doSomething(function(result){
console.log(result)
})
var doSomething(callback){
setTimeout(function(){
console.log('some thing')
callback('success')
},0)
}
doSomething(function(result){
console.log(result)
})
你打电话问书店老板有没有《分布式系统》这本书,如果是同步通信机制,书店老板会说,你稍等,”我查一下",然后开始查啊查,等查好了(可能是5秒,也可能是一天)告诉你结果(返回结果)。
而异步通信机制,书店老板直接告诉你我查一下啊,查好了打电话给你,然后直接挂电话了(不返回结果)。然后查好了,他会主动打电话给你。在这里老板通过“回电”这种方式来回调。