javascript - 為什么js代碼后面報錯,會導致前面的代碼執行不了,我確定后面的部分和前面的部分沒有邏輯上的關聯。
問題描述
最近在用野狗云實時通信引擎做一個todo應用。大致就是,前面有一個函數在監聽云端數據的變化,并將云端數據同步到本地。所以每次刷新瀏覽器,頁面上的數據都會正常顯示。
后面有一個實現刪除便簽功能的函數,這兩個函數之間邏輯相互獨立,后面的函數對前面并不會造成影響。但是有一次刪除便簽功能的函數有一條語句出錯了,再刷新頁面就無法正常顯示便簽了。不是說js是一條一條執行的嗎,為什么在我這個程序里會有這種情況發生。
var task_list = new Array();var i =0;//野狗云初始化var config = { syncURL: 'https://mytodo123.wilddogio.com' //輸入節點 URL};wilddog.initializeApp(config);var ref = wilddog.sync().ref();//綁定鍵盤回車鍵$(document).keydown(function(event){ if(event.which == 13) {$('#btn1').click(); }});/*點擊submit時,將數據先添加到野狗云*/$('#btn1').click(function(){ var content=$('#ipt1').val(); if(content != ''){ ref.child('note').push(content); $('#ipt1').val(''); }}); /*監聽云端數據變化*/ ref.child('note').on('child_added',function(snapshot){var list = $(’#task-list’);content = snapshot.val();var textObj = ’<p class='task-item'><input type='checkbox' /><span class='ui-icon ui-icon-clock'></span><span class='task-content'>’+content+’</span><span class='task-detail'>detail</span></p>’;list.prepend(textObj); });//刪除便簽$('#btn2').click(function(){ $('input[type=’checkbox’]:checked').each(function(){var delObj = $(this).parents('p.task-item')delObj.remove(); });});
問題解答
回答1:簡單說,JS執行前首先要對整個代碼塊(js文件或script標簽)做語法分析(parsing),你這Uncaught SyntaxError: Unexpected token說明連語法這步都過不了,整個代碼塊都不能執行了。
你可以看這文章,改變不是說js是一條一條執行的嗎這種看法。
回答2:可以打斷點看看執行順序
