js的let語句在安卓手機端的QQ瀏覽器出錯的問題


關於JavaScript里面的let,let 語句可以聲明一個塊級作用域的本地變量,並且可選的將其初始化為一個值。

<ul id="list"> </ul>
var list = document.getElementById("list");
for (var i = 1; i <= 5; i++) {
    var item = document.createElement("LI");
    item.appendChild(document.createTextNode("Item " + i));

    let j = i;
    item.onclick = function (ev) {
        console.log("Item " + j + " is clicked.");
    };
    list.appendChild(item);
}           

分別點擊頁面的li標簽內容,控制器分別輸出一下內容:

解析:

  如果不用let,而改用var的話,將總是打印出 Item 5 is Clicked,因為var聲明的 j 是函數級變量,5個內部函數都指向了同一個 j ,而 j 最后一次賦值是5。

  用了let后,j 變成塊級域(也就是花括號中的塊,每進入一次花括號就生成了一個塊級域),所以 5 個內部函數指向了不同的 j 。

然而這次要討論的並不是關於let的用法,而是做新項目的時候發現了個新問題:使用了let的項目無法在安卓手機的QQ瀏覽器APP正常打開頁面(頁面空白)

首先推薦個鏈接: http://ruanyf.github.io/es-checker/index.cn.html(檢測當前的瀏覽器是否支持ECMAScript 6)

 左邊是安卓QQ app里面帶的瀏覽器測得結果,而右邊是安卓QQ瀏覽器APP的測試結果(測試PC端瀏覽器及手機的其他瀏覽器大部分都是90%以上)。

而我目前的解決方法僅是將let改為了var。然后說一下解決這個問題的思路,首先let是ES6新增的語法,所以我們需要去查一下哪些瀏覽器不支持ES6。

比較幸運的是居然找到了上面說到的測試鏈接,真的很好用,直接用瀏覽器打開鏈接就可以知道其兼容性。

除了let的問題,本次項目用到了vue.js,剛開始函數聲明方式不嚴謹,但是在PC端,安卓的其他瀏覽器(除了QQ瀏覽器),IOS的瀏覽器包括QQ瀏覽器,都可以正常顯示,唯獨安卓的QQ瀏覽器不能正常顯示。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM