下面的代碼輸出,修改代碼讓 fnArri 輸出 i灿渴。
var fnArr = [];
for (var i = 0; i < 10; i ++) {
fnArr[i] = function(){
return i;
};
}
console.log( fnArr[3]() );
//此為原題
//輸出等于10 .因為全局就只有一個i = 10..return的也是全局的這個值.?
方法一:
var fnArr = [];
for (var i = 0; i < 10; i ++) {
!function(i) {
fnArr[i] = function() {
return i;
};
}(i)
}
console.log( fnArr[3]() );
方法二:
var fnArr = [];
for (var i = 0; i < 10; i ++) {
fnArr[i] = (function (i) {
return function() {
return i
}
})(i)
}
console.log( fnArr[3]() );
方法三:
var fnArr = [];
for (let i = 0; i < 10; i ++) {
fnArr[i] = function(){
return i;
};
}
console.log( fnArr[3]() );
封裝一個汽車對象凿渊,可以通過如下方式獲取汽車狀態(tài)
var Car = (function(){
var speed = 0;
function setSpeed(s) {
speed = s
}
...
return {
setSpeed: setSpeed,
...
}
})()
Car.setSpeed(30);
Car.getSpeed(); //30
Car.accelerate();
Car.getSpeed(); //40;
Car.decelerate();
Car.decelerate();
Car.getSpeed(); //20
Car.getStatus(); // 'running';
Car.decelerate();
Car.decelerate();
Car.getStatus(); //'stop';
//Car.speed; //error
<script>
var Car = (function() {
var speed = 0;
function setSpeed(arg) { //設置速度
speed = arg
console.log('您設置設置速度為:' + arg)
}
function getSpeed() { //獲取速度
console.log('當前速度: '+ speed)
}
function accelerate() { //加速
speed += 10;
console.log('提速: 10_目前速度:' + speed)
}
function decelerate() { //減速
speed -= 10;
console.log('減速: 10_目前速度:' + speed)
}
function getStatus() { //獲取狀態(tài)
//speed > 0 ? console.log('running'):console.log('stop');
console.log(speed > 0 ? '車輛處于行駛狀態(tài)' : '車輛處于停止狀態(tài)');
}
return {
'setSpeed' : setSpeed,
'getSpeed' : getSpeed,
'accelerate' : accelerate,
'decelerate' : decelerate,
'getStatus' : getStatus
}
})()
Car.setSpeed(30); //您設置設置速度為:30
Car.getSpeed(); //當前速度: 30
Car.accelerate(); //提速: 10_目前速度:40
Car.getSpeed(); //當前速度: 40
Car.decelerate(); //減速: 10_目前速度:30
Car.decelerate(); //減速: 10_目前速度:20
Car.getSpeed(); //當前速度: 20
Car.getStatus(); //車輛處于行駛狀態(tài)
Car.decelerate(); //減速: 10_目前速度:10
Car.decelerate(); //減速: 10_目前速度:0
Car.getStatus(); //車輛處于停止狀態(tài)
</script>
下面這段代碼輸出結果
var a = 1;
setTimeout(function() {
a = 2;
console.log(a);
}, 0);
var a ;
console.log(a);
a = 3;
console.log(a);
//輸出結果:
//輸出: [1] 原因:前面 [var a = 1][var a (多余聲明)]很好理解,唯一問題就落在定時器[setTimeout]這里.它會等其他函數(shù)執(zhí)行完再執(zhí)行.
//輸出: [3] 原因:前面 [a = 3] 賦值于全局 得出此結果
//輸出: [2] 原因:定時器 [setTimeout] 的 [a = 2] 賦值于全局 a
下面這段代碼的輸出結果
var flag = true;
setTimeout(function() {
flag = false;
},0)
while(flag){}
console.log(flag);
//跳過定時器[setTimeout]最后執(zhí)行
//循環(huán)(條件:true){內容}.沒終止的條件_致死循環(huán)
//console.log:等著..永遠輪不到...
下面這段代碼的輸出篇亭?如何輸出delayer: 0, delayer:1...(使用閉包來實現(xiàn))
for(var i=0;i<5;i++) {
setTimeout(function() {
console.log('delayer:' + i );
}, 0);
console.log(i);
}
for(var i=0;i<5;i++) {
(function (i) {
setTimeout(function(){
console.log('delayer:' + i );
}, 0);
})(i)
console.log(i);//0 1 2 3 4 5
}
如何獲取元素的真實寬高
首先我們要獲取元素節(jié)點遣总,var node = document.querySelector('#id'),然后利用window對象的getComputedStyle來獲取相應的css屬性,比如:window.getComputedStyle(node).height/width返回的是相應的寬高昌抠,單位為像素.
URL 如何編碼解碼患朱?為什么要編碼?
- 編碼的方式有兩種扰魂,第一種是使用encodeURI();參數(shù)為一個url字符串或字符串對象麦乞,通過這種方式編碼的url相比encodeURIComponent()編碼的將會把元字符和語義字符之外的字符,都進行轉義,而后者除了語義字符之外的字符劝评,元字符也會被轉義姐直。因此,它的參數(shù)通常是URL的路徑或參數(shù)值蒋畜,而不是整個URL声畏。
- 編碼的作用無非就是為了使用起來更加方便輕巧且易于區(qū)分,避免造成誤會比如當我門要返回一個網址的時候,?back=xxx&value = return.這樣便不會把后面的value也當成了前一個網頁的參數(shù)值.
補全如下函數(shù)插龄,判斷用戶的瀏覽器類型
var test = window.navigator.userAgent;
console.log(test);
function isAndroid(){
if(/Android/i.test(test)){
return console.log('isAndroid');
}
}
function isIphone(){
if(/iPhone/i.test(test)){
return console.log('isIphone');
}
}
function isIpad() {
if(/iPad/i.test(test)){
return console.log('isIpad');
}
}
function isIos(){
if(/iPad/i.test(test)){
return console.log('isIpad');
}
}
function isMac() {
if(/Macintosh/i.test(test)){
return console.log('isMac');
}
}
isAndroid();
isIphone();
isIpad();
isIos();
isMac();
=====