闭包–打车问题
问题:打车起步价13元(三公里以内),之后每多一公里加五块钱。用户输入公里数就可以知道打车的价格。如果有拥挤的情况,总价格多收取10元。
var car = (function(){
var strart=13;
var total=0;
return{
//返回了两个函数用car来接收
price:function(n){
if(n<=3){
total=start;
}else{
total = strat+(n-3)*5;
}
return total;
},
yd: function(flag){
return flag? total+10:total;
}
}
})();
console.log(car.price(5));//23
console.log(car.yd(true));//33
关于function()()
就是第一个括号是函数,第二个是调用
(function(){})()定义了一个匿名函数,相当于先定义 function xx(){},然后调用 xx();
()是最高优先级的,所以先执行function(){},相当于xx=function(){},接着就是调用xx()了。
给个例子:
function f1(a)
{
alert(a);
}
function f2(a)
{
return function(){ alert(a); }
}
var x=f2 相当于把函数传递给了f2,然后要执行这个函数,就必须加(),也就是x(),也就是f2()。
还是
var x=(function f2(a){
return function(){
alert(a);
})();
看到的两个思考题
var name="the window";
var object = {
name:"my object"
getNameFunc: function(){
return funnction(){
return this.name;
};
}
};
console.log(object,getNameFunc()())
//拆解成
var f = object.getNameFunc();
//相当于
var f =function(){
return this.name;
}
f();
//关键就是看this指向的是谁
function(){this}();//输出the window,没有闭包
看这个
var name="the window";
var object = {
name:"my object"
getNameFunc: function(){
var that=this;
//this这里指向的是函数的调用者,即object
return funnction(){
return that.name;
};
}
};
console.log(**object,getNameFunc()**())
//
var f = **object.getName();**
var f = function(){
return that.name;
};//相当于返回值
f();