做用域,兩個數簡單求和,移動端事件簡單應用

js做用域問題
js事件處理器在線程空閒時間不會運行,致使最後運行的時候輸出的都是同一個值

1.使用閉包緩存當前值的生存週期es6

for (var i = 1; i <= 5; i++) {
    (function (k) {
        setTimeout(function () {
            console.log(k)
        }, 1000)
    })(i)
}

2.es6屬性 聲明let會有本身的做用域數組

for (let i = 0; i < 5; i++) {
    setTimeout(function () {
        console.log(i)
    }, 1000)
}

寫一個函數,對於一個排好序的數組,若是當中有兩個數的和爲某個給定的數target,返回true,不然false,時間複雜度O(n)緩存

function combination(arr, target) {
    for (var i = 0; i < arr.length - 1; i++) {
        for (var j = i + 1; j < arr.length; j++) {
            if (arr[i] + arr[j] === target)
                return true;
        }
    }
    return false
}
/** 
 * 題目
 *  @1.setTimeout(function() {
    console.log(1);
    }, 100);
    @2.setTimeout(function () {
    console.log(2);
    }, 0)
    @3.Promise.resolve(console.log(3)).then(() => { console.log(4) })
    @4.async function async1(){
    console.log(5)
    await async2()
    console.log(6)
    }
   @5. async function async2(){
    console.log(7)
    }
  @6. async1()
  @7.console.log(8)
* @answer 3 5 7 8 4 6  2 1
 遵循原則 :同步==》異步==》回調函數 
 編號@1@2是一個回調函數因此放在最後執行
 編號@3做爲一個Promise對象 首先Promise的出現是由於js是單線程的一門語言,單線程只能按照順序去執行A執行完了B纔開始執行,
 因此執行代碼會形成阻塞,Promise是爲了解決這個所給咱們帶來困擾問題的一種異步解決方案,
 所以@3>@2>@1
 編號@4 async 實際上只是 Generator 函數的語法糖 async函數就是將 Generator 函數的星號(*)替換成async 僅此而已
 async函數返回一個 Promise 對象 await(等待) await命令後面的 Promise 對象執行完,纔會發生狀態改變
 因此@4 能夠直接打印出5 可是必須等待 async2的完成才能夠打印6
 因此此時的順序是@3(then是結果此時是異步操做)@6>>@7@5>@2>@1
 所以結果是 : 3 5 7 8 4 6  2 1

touchstart : 觸摸開始(手指放在觸摸屏上)
touchmove : 拖動(手指在觸摸屏上移動)
touchend : 觸摸結束(手指從觸摸屏上移開)閉包

class touchEvent {
    constructor(target, away) {
        this.dom = target;
        this.away = away;
    }
    getDom() {
        document.querySelector(this.dom).addEventListener(this.away, this.touchStart)
    }
    touchStart = (e) => {
        /** 
         * 記錄起始點
        */
        // 觸摸開始
        document.querySelector(this.dom).addEventListener('touchmove', this.touchMove)
    }
    touchMove = (e) => {
        // 觸摸中
        document.querySelector(this.dom).addEventListener('touchend', this.touchEnd)
    }
    touchEnd = (e) => {
        // 觸摸結束
    }
}
new touchEvent('#swiper', 'touchstart').getDom();
相關文章
相關標籤/搜索