
html 執行 js function 在 コバにゃんチャンネル Youtube 的最佳解答

Search
// 使用箭頭函式時,不論什麼時候執行函式,this 會和instance object 綁定。 var Person = function ... ... <看更多>
TypeScript 邁向專家之路:零基礎JavaScript 打通Angular、React 與Vue.js 前端框架實戰 · 為了解決 HTML 執行js function 的問題,作者siakoMobi 這樣論述 ... ... <看更多>
一定要先包裝成一個Function Expression,才能進行立即呼叫。 總結. 函數有三種被呼叫的時機:. HTML 事件觸發; 由其他JavaScript 程式碼主動呼叫; 立即函數.
#2. JavaScript Function 函數用法- JavaScript (JS) 教學Tutorial
JavaScript Function (函數). 函數(function) 用來將會重複使用的程式碼封裝在一起,方便重複執行。 函數宣告(Function declaration).
#3. 函式- JavaScript - MDN Web Docs
The scope of a function is the function in which it is declared, or the entire program if it is declared at the top level. Note that this works ...
#4. 網頁Web-Javascript-Function()使用與呼叫| Yiru@Studio
1.Function()使用與呼叫2.練習:點選計算按鈕,即可顯示計算結果3.在javascript中使用變數.
#5. JavaScript 的function 功能(函式介紹) - 客座投稿 - W3HexSchool
來把所有的東西都整合在一起吧,簡單的計算機練習. 下方是一個簡單的HTML 網頁,我要讓它執行簡單的計算,當我們輸入相關的數字之後,只要一按 ...
#6. 在HTML 正文中呼叫一個JavaScript 函式| D棧
JavaScript JavaScript Function. 在HTML 正文中呼叫一個JavaScript 函式. 本文介紹瞭如何使用 <script> 標籤呼叫JavaScript 函式以在HTML 正文中執行。
#7. [JS] JavaScript 函式(Function) | PJCHENder 未整理筆記
// 使用箭頭函式時,不論什麼時候執行函式,this 會和instance object 綁定。 var Person = function ...
#8. [第四週] JavaScript — 函式function. 學習目標 - MiaHsu
以網頁功能做說明的話,當User 在登入或註冊有錯誤時,我們需要一個好看的 ... log('hi');};//執行Function Expressionsconsole.log( anonymousGreet ); ...
#9. 載入網頁後執行JavaScript的function
因為我把userList()這個function寫在body onload裡,它會卻會在Page_Load之前執行,不過我希望在網頁全部載入完成之後才先自動執行一次userList(),我不 ...
#10. JavaScript 函数| 菜鸟教程
JavaScript 函数函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。 实例[mycode3 type='html'] 测试实例function myFunction() { alert('Hello World!
#11. html 执行js function
html 执行js function. 在HTML 中执行JavaScript 函数有几种方式,下面是其中的一些方法:. 直接在HTML 代码中使用script 标签嵌入JavaScript 代码,通过调用函数来执行 ...
#12. HTML 執行js function的問題包括PTT、Dcard、Mobile01
TypeScript 邁向專家之路:零基礎JavaScript 打通Angular、React 與Vue.js 前端框架實戰 · 為了解決 HTML 執行js function 的問題,作者siakoMobi 這樣論述 ...
#13. 函式與作用域· 從ES6開始的JavaScript學習生活
... JavaScript在執行時的呼叫堆疊也是以函式作為單位。 注意: 依據ECMAScript標準的定義,函式的 typeof 回傳值是'function',而不是'object'。由此可見在標準中定義的 ...
#14. 网页中JS函数自动执行常用三种方法- javascript技巧
... html>. 2.在JS语句调用:. <script type="text/javascript"> function myfun() { alert("this window.onload"); } /*用window.onload调用myfun ...
#15. html js function()默认执行,javascript立即执行某个函数
html js function ()默认执行,javascript立即执行某个函数:插件中function(){}()再思考 转载. 2021-06-16 06:55:27. 独自冷静的时光. 码龄7年. 关注. 几种方式立即执行 ...
#16. onload 事件
... JavaScript 的特定function 去執行任務。 onload 基本語法. onload = " 要觸發的 ... JavaScript onfocus 事件. 您可能會想看. HTML div 標籤 · 設計HTML 圖片與圖片邊框間的 ...
#17. iPhone 或iPad 上「捷徑」中的「在網頁上執行JavaScript」動作 ...
因為JavaScript 通常是搭配非同步模式使用,所以呼叫會刻意不同步。如此一來,你可以非同步方式完成動作。例如,以下方式可行:. window.setTimeout(function() { ...
#18. HTML Script 載入小技巧:defer 與async
demo.js 如下,目標是要讀取 <div id="d"> 文字,測試四種方式:直接讀取、window.onload 事件、jQuery(document).read()、jQuery(function() ) (快捷寫法 ...
#19. 使用JavaScript 填入文字欄位並點選連結- Power Automate
在部署在網頁上執行JavaScript 函數動作之前,您需要要填入或點選之元素 ... function ExecuteScript() { document.querySelectorAll('CSS-selector ...
#20. 超連結內用onclick 開啟javascript function 寫法範例
在上述程式碼中,使用onclick 屬性來定義當點擊連結時要執行的JavaScript function。 ... 如何修改HTML DIV 區塊內的文字大小 · 如何修改HTML span 區域內的文字大小 · 如何 ...
#21. HTML 套用JavaScript - HTML 教學 - STEAM 教育學習網
JavaScript ( 簡稱JS ) 是目前廣泛被用於HTML 的腳本語言( scripting language ) ... addEventListener('click',function(){ alert('ok'); }). HTML 內容: <script src ...
#22. 1-1 、 如何在瀏覽器上執行JS
可參考 Document.getElementsByTagName() ; 這些function 都放在瀏覽器提供的特殊物件document 上。 存成index.html 檔案: <!DOCTYPE HTML> <html> <head> <meta ...
#23. 談談JavaScript 的setTimeout 與setInterval - Kuro's Blog
像這樣的做法,通常稱它為IIFE (Immediately Invoked Function Expression), 一用就丟 立刻被呼叫、執行的function 表達式。 或者,也可以改用 let ...
#24. html先执行javascript html自动执行js函数
function myFunction(){ //函数内容console.log("函数自动执行"); } 函数自动执行方法一: window.οnlοad=myFunction();. 1. 2. 3. 4. 5. 6. 注:.
#25. 無痛理解JS | 非同步怎麼運作? - 五倍紅寶石
... ,涵蓋HTML、CSS、JavaScript 和Ruby on Rails 等 ... Javascript function 執行流程很有幫助. 以上為JS 如何在 Single Thread ...
#26. 5-4 預約程式碼的執行
由上述範例可知,setTimeout() 的格式如下:. timer = setTimeout("JavaScript的命令列", 時間長度). 換句話說,當過了「時間長度」所 ...
#27. 透過程式範例,熟悉JS 執行流程的關鍵:Event Loop
function 的執行順序遵循「後進先出」(LIFO, Last In First Out)的模式。 一次 ... 執行,進而衍生出網頁有問題的狀況。 舉一個情境,下面這段程式中含有 onClick 與 ...
#28. 想要等WEB的網頁載入之後再執行JS,該怎麼寫?
頁面載入完成後等待一段時間在執行js的方法,時間如何設定. 例如方法: function fundotest(){return 1;} 頁面載入完畢事件: window.onload = function ...
#29. HTML onclick——JavaScript 点击事件教程
function changeColor() { name.style.color = "blue"; }. 发生了什么事情? HTML中的 changeColor() 是我们要执行的函数,如果的这个名字与HTML中的 ...
#30. 瞭解JavaScript 搜尋引擎最佳化(SEO) 基礎知識
在Google 資源允許的情況下,無頭Chromium 會轉譯網頁並執行JavaScript。 ... // this function loads different content based on the current URL fragment const ...
#31. 適用於CloudFront Functions 的JavaScript 執行時間功能
CloudFront Functions JavaScript 執行時間環境符合ECMAScript (ES) 版本5.1 ,並且支援ES 版本6 到9 的一些功能。它還提供了一些不屬於ES 規格的非標準方法。
#32. 寫給程式麻瓜的JavaScript基礎介紹,跟工程師溝通零障礙
可重複執行的區塊內,位置在函式的{}內. function sum(a,b) { result=a*b ... JavaScript在執行網頁上的動畫特效時,透過流程控制可以決定動畫物件出現 ...
#33. 前端js 頁面載入完成事件- onload,五種寫法
前兩者本質上沒有區別,第1種是第2種的簡寫方式。兩個是document載入完成後就執行方法。 3:使用jQuery的$(window).load(function(){}) ...
#34. 事件處理器
在事件觸發時JavaScript 可以執行一些代碼。 定位與用法. 事件處理器通常放在表單 ... 事件處理器. click 事件(onClick). <html> <head> <title>Events & Functions</title> ...
#35. Function 函式- JavaScript 教學
... JavaScript 入門核心概念; Function 函式- JavaScript 教學|ALPHA Camp. Function 函 ... 但這樣每次執行程式,都只能獲得一組彩券編號,這不是太蝦了嗎? 所以想當然爾 ...
#36. JavaScript :: 初探script 標籤
... 執行JavaScript,乍看是件簡單的事,只要在HTML檔案中撰寫script 標籤,並於標籤間撰寫JavaScript 程式 ... onload = function() { var ...
#37. JavaScript:如何正確將多個function加到window.onload
我們常會希望在網頁載入完成後可以自動執行某些動作, 這時我們就可以利用onload 這個event。 圖片來源:http://www.mhtml5.com/2011/05/1324.html/javascript-web.
#38. 基础篇:1.JavaScript运行在html中,引用有几种方式?—— 6. ...
onload = function (){. var script = document.createElement( "script ... 第一段js执行会出错,因为html代码运行是至上而下加载的,第一段 ...
#39. 動態HTML - 維基百科,自由的百科全書
動態HTML技術根據執行地點,分為客戶端指令碼(也稱瀏覽器指令碼)和伺服器指令碼 ... javascript"> function changeDisplayState (id) { d=document.getElementById ...
#40. JavaScript 中的同步與非同步(上):先成為callback 大師吧!
js 這個執行環境上面,就可以利用Node.js 提供的東西。 那Node.js 提供了 ... 所以網頁還沒載入完成時就會執行load 這個function 了。 再次重申, tick ...
#41. JS 加不加分號差在哪?
... function() { })() ;(function() { })(). 結語. 不加入分號可以讓程式碼看 ... 執行上的錯誤(很少,大多都可避免),因此許多開發者也會選擇不加入分號 ...
#42. Node.js是伺服器端的程式
setInterval(callback, delay[, ...args])這個函數是每經過delay時間後便會重複執行callback函數。 >> let st = setTimeout(function(){ console.log(" ...
#43. window.onload - function(){}());的执行顺序(初)
DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <script src="../build/jquery.min.js"></script> <div id="id" class="id"> ...
#44. 1-3 資料加工與邏輯整合 - 重新認識Vue.js
... 執行。 這是因為 computed 會將計算後的結果暫存起來,並且只會在它所觀察的屬性,如 this.XXX 被更新的時候,才會再次執行對應的 function 。 小提醒.
#45. 跨網站載入與執行JavaScript 的方式
接著,我要準備一個網頁,在其中將利用 document.createElement('script'); 動態載入上列的ext.js 。 <script type="text/javascript"> ...
#46. [筆記] 談談JavaScript中函式的參數(parameter),arguments ...
之所以會這樣是因為當JavaScript在執行這個function的時候,它會先為我們 ... 謝謝分享! Tags. Udemy PHP CSS 數位生活 HTML MySQL jQuery APP分享 ...
#47. (HTML)js里面的function什么时候才会用到啊?
onload = function () {};这个表示是先加载dom文档再执行JS代码2.要实现封装、继承、多态时都需要用到函数。 3.函数有复用代码与减少代码编写的作用。 其实,function ...
#48. Javascript setTimeout 執行時間錯亂 - Puritys Blog
你是否在製作前端頁面的時候,使用了setTimeout ,希望每一秒執行某一個function , 可是javascript 的settimeout 似乎沒辦法正確的一秒執行一次,拿 ...
#49. 在jQuery中,要做到「等網頁載入後再執行」,有兩種選擇
因此,我們幾乎都是將程式放在$(document).ready(function() { … })中(即$(function() { … }))。 $(window).load(fn)適合執行一些要等待圖檔或元素全部載 ...
#50. [jQuery]教學-網頁載入後再執行,jQuery(document).ready()與 ...
jQuery is a fast, small, and feature-rich JavaScript library. It makes things like HTML document traversal and manipulation, event handling, animation, and Ajax ...
#51. [WordPress] 在wp_footer() 設定全站共通執行的javascript | 文章
有安裝好plugin 的話,在裡面新增一段程式碼片段,並在裡面寫入這段內容: function site_js() { ?> <script > //your js code </script> <?php } ...
#52. JavaScript 中的同步與非同步(上):先成為callback 大師吧!
js 這個執行環境上面,就可以利用Node.js 提供的東西。 那Node.js 提供了 ... 所以網頁還沒載入完成時就會執行load 這個function 了。 再次重申, tick ...
#53. 加速JavaScript 執行效率的DOM 操作技巧(降低瀏覽器回流)
問題. 假設我們寫一個JavaScript 函數,用來更改網頁元素的CSS 屬性: function selectAnchor(element) { element.style.fontWeight = 'bold'; element ...
#54. JavaScript Timing Events
Same as setTimeout(), but repeats the execution of the function continuously. The setTimeout() and setInterval() are both methods of the HTML DOM Window object.
#55. 3. Turbolinks 解說- Rails 實戰聖經
網上所有jQuery 的教學文章,都是用 $(document).ready(function(){...}) 或 $(function(){...}) ,在HTML 載入完畢後執行js 源碼。但是用了Turbolink 只會觸發第 ...
#56. [JS]用書籤、我的最愛執行JS code - MRcoding筆記
... function () {alert('哈囉')})();. @copyright MRcodingRoom 觀看更多文章 ... html Java javascript js Leetcode list markdown php python react seo ...
#57. [JavaScript] 檢查DOM 載入狀態Document.readyState - zwh.zone
html <body> <head> <meta charset="utf-8"> <title>活動首頁</title> </head> ... 但在60 秒後,你會發現function 並沒有被執行,這是因為在game.js 中 ...
#58. jQuery_動態載入js與html
使用jQuery動態載入HTML(官網) $("#div1").load("widgets/function/functionPage1.html", function () { console.log("Load functionPage1.html OK.
#59. 在視窗間通訊(一):使用JavaScript
接著製作將被開啟的opened.htm網頁。 請在新的網頁的檔頭區,建立底下的JavaScript程式: <script language="javascript"> // 傳送訊息並關閉視窗function closeWindow() { ...
#60. 善用JavaScript 的debugger 指令讓網頁主動進入中斷點
... javascript"> (function () { debugger; alert('開始執行'); })(); </script> </head> <body> <div class="page"> </div> </body> </html>. 其中第10 ...
#61. javascript 與php 之間的互相呼叫
... 執行過程中,需要呼叫JavaScript自定義函數(驗證時出錯) echo "function ok(msg){alert(msg);}"; ?> <HTML> <HEAD> <TITLE> php呼叫js文件的好辦法</TITLE>
#62. [Selenium]29.执行JavaScript
ready(function(){ $('#tooltip').tooltip({"placement": "right ... /html/js.html') dr.get(file_path) sleep(2) # 在页面上直接执行js ...
#63. [ASP.NET]從後台透用C#呼叫前台寫好的JavaScript function()
此文章不是如何在從*.cs中編寫一段js並到前台執行而是在*.cs中, 使用一段前台已經寫好的js功能此篇介紹的是作用於page內, 而非updatepanel中的js, ...
#64. 問題【JavaScript】html撈外部JS檔案『部分失效』一問
... 執行到,故排除JS路徑問題. 有Google查過可能是太早讀取 ... 還請大神解惑,感謝!!! 如果有大大覺得是其他js內容影響到此function效果,我再貼上整個JS內容~.
#65. Re: [討論] javascript是共時、多執行緒嗎? - 看板Ajax
... html parsing的動作會停下來直到1.下載javascript(如果是外部連結的話) 2 ... function B(){ : alert("C"); : alert("D"); : } : 透過setTimeout ...
#66. 使用純JS 和jQuery 在頁面加載後運行JavaScript 代碼
JavaScript 和jQuery 库提供了几种在DOM 准备好后执行 ... 雖然不推薦,但您也可以使用HTML 在頁面加載時調用JavaScript 方法 <body> 標籤。
#67. 淺談js在html中的載入執行順序,多個jquery ready執行順序
... javascript"> function aa(s) { alert('Second aa'); } function aa(s) { alert('Last aa'); } </script> </html>. 點選“botton”執行結果: Last aa. 在 ...
#68. [第七週] DOM - 操作DOM 介面、事件監聽
執行JS - Node.js、瀏覽器的差別. 兩個是不同的執行 ... 如何使用Callback function. 其實就是把function 當參數,當拿到response 才執行callback function.
#69. JavaScript 宣告: var、let、const-iWare網頁設計公司
區域變數:在函式作用域(function scope)內宣告,每次執行函式時,就會建立區域變數再予以摧毀,而且函式之外的所有程式碼都不能存取這個變數。 聽 ...
#70. [網頁設計] 教學:網頁載入的過程| 開源技術教學
$(window).load(function () { // Implement your code here. }); 例如 ... 這時候,頁面會在背景下載JavaScript 命令稿,在網頁載入後依序執行jquery.
#71. 關於超連結a的另外一種OnClick的寫法 - 飛朵啦學習手札
點下連結時,不會連往另一頁,而是執行函式handler() 。 無作用連結大致有兩種寫法, <a href="#" 和 <a href="javascript: void(0)" :. <a href ...
#72. 解決JavaScript和CSS媒體查詢取得的視窗寬度不同的問題
html ('false'); // JavaScript here // 網頁載入時執行一次 }, match: function() { $('#holder').html('true'); // JavaScript here // 當CSS media ...
#73. jQuery $(document).ready() - 記下來
js "></script> <script type="text/javascript"> $(function(){alert ... function(){});也還是可以正常執行呢?是因為小蛙習慣把JavaScript寫在網頁 ...
#74. Can I name a JavaScript function and execute it ...
live('click', function() { display("You clicked the message '" + this.innerHTML + "'"); }); function display(msg) { $("<p>").html(msg).
#75. [轉貼]怎麼樣讓javascript 等待一段時間後繼續執行後面的程序?
<script language="javascript"> function go(){//定義函數window.location="main.html";//頁面跳轉} window.setTimeout("go()",1000);//1秒後執行函數go ...
#76. How to call JavaScript function in html
Calling a function using external JavaScript file · <html> · <head> · <script type = "text/javascript" src="function.js"></script> · </head> · <body> · <p>Click the ...
#77. Introducing JSX
... JavaScript function calls and evaluate to JavaScript objects. This means ... HTML, React DOM uses camelCase property naming convention instead of HTML attribute ...
#78. three.js docs
three.js. docs examples. en, ar, 한국어, 中文, 日本語, it, pt-br, fr, ru. Manual. Getting Started. Installation · Creating a scene · WebGL compatibility ...
#79. Window onload click. Common … The window. Are there are ...
また、 window の部分 Then we gonna add our JavaScript function to play the audio on page load. ... JavaScript code to an HTML event attribute: onclick= JavaScript ...
#80. JSFiddle - Code Playground
Test your JavaScript, CSS, HTML or CoffeeScript online with JSFiddle code editor.
#81. Process | Node.js v20.6.1 Documentation
... js process to continue. The listener callback function is invoked with the value of process.exitCode passed as the only argument. The 'beforeExit' event is ...
#82. Jquery after load page complete. resizeDelayed( false, id )
... js; html tag run … Sep 8, 2023 · A plain object or string that is sent to the ... function (html) { $ ('. If all the images are not loaded then it still ...
#83. API Reference
Advanced APIs · Render Function · Server-Side Rendering · TypeScript Utility Types · Custom Renderer.
#84. Oracle apex javascript get global variables. So the normal soluti
Define the global variable and asynchronous JavaScript function in the JavaScript Function ... JS calls in the html form element attributes within select lists on ...
#85. JS Bin - Collaborative JavaScript Debugging
A live pastebin for HTML, CSS & JavaScript and a range of processors, including SCSS, CoffeeScript, Jade and more...
#86. Babel · The compiler for next generation JavaScript
Targets. defaults, not ie 11, not ie_mob 11. Presets. react flow typescript stage-3 stage-2 stage-1 stage-0 Options React Runtime. Automatic, Classic.
#87. ASML 執行長Wennink 對荷蘭經濟的「未來盈利能力」深感憂心
此網頁需要支援JavaScript 才能正確運行,請先至你的瀏覽器設定中開啟JavaScript。 This webpage requires JavaScript to function properly. Please ...
#88. Javascript calculator if else. log("a is not 1") - Transportes LC
The argument of the eval () function is a string. The HTML code consists of a div with a class calculator. Take two numbers and the operator as inputs from the ...
#89. Jquery string to int. This code assumes you won't have any ...
... HTML string through jQuery. The W3Schools online code editor allows you to ... For example, the jQuery factory function $ () returns a jQuery object that ...
#90. Oracle apex javascript get global variables. Use Oracle APEX ...
Define the global variable and asynchronous JavaScript function in the JavaScript Function ... JS calls in the html form element attributes within select lists on ...
#91. Handlebars.js
Fast execution. Handlebars compiles templates into JavaScript functions. This makes the template execution faster than most other template engines. Live Demo →.
#92. JavaScript 入門指南- 如何執行Javascript 程式
JavaScript 程式可以直接寫在HTML 文件的<script> 標籤中,然後用瀏覽器開啟HTML 文件就會直接執行 當然,這是一個方式,不過我們打算把JavaScript 程式放在.js 檔案 ...
#93. Connect to a MongoDB Database Using Node.js
Throughout this series, we'll create new functions similar to the function ... 從MongoDB 7.0 開始,對查詢執行的改進將減少執行某些查詢所需的磁盤讀 ...
#94. 微信网页开发/ JS-SDK说明文档
# 步骤四:通过ready接口处理成功验证. wx.ready(function(){ // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户 ...
#95. Beforerouteenter vue 3 github. I specifically want ...
js Lines 102 to 132 in 36ff331 function nextCheck(context Hi all, I've ... beforeRouteEnter 执行了两次 What problem does this feature solve? In the current ...
#96. text/template - Go Packages
This function is unavailable in html/template, with a few exceptions. index ... js Returns the escaped JavaScript equivalent of the textual representation of ...
#97. 跟著實務學習HTML5、CSS3、JavaScript、jQuery、jQuery Mobile、Bootstrap ...
... <html> <head> <meta charset="utf-8" /> <title></title> <script> function ... 執行 onclick 屬性指定的 fnHello 函式 9.2.2 網頁中引用外部的 JavaScript 檔案當 ...
html 執行 js function 在 Re: [討論] javascript是共時、多執行緒嗎? - 看板Ajax 的推薦與評價
跟大家分享一下 我對一般常見的browser處理javascript的認知
有錯誤請大家不吝指教
先回答標題好了
就我所知 目前javascript在browser的implementeation中
在一個"window"下中只有一個thread 在這種情況下 你可以說javascript是單一thread
事實上大部分的時候 我們只要以這出發點來考慮問題就足夠了
然而 如果你的頁面中有iframe 他會有另外一個window去維護另一個thread
在同網域下 他甚至可以存取相同的global物件 造成所謂的race condition
在這種狀況下 你可以說javascript 是 multi-thread 我想也是合理的
=======================
所以說 與其討論javascript到底是不是multi-thread
其實應該討論的問題是 browser的實作方式
首先我們開啟一個頁面 在這個window中會開啟一個thread 處理包括
1.html的parse
2.dispatching of events
3.執行javascript
然後在parse的過程中 如果遇到某些tag像是img, embed, iframe,object 等等
他會開啟另外一個thread去下載,render,或是執行iframe裡面的js等等
這也是為甚麼 我們會看到在load一個網頁 下載圖片是分開的 每張獨立下載 獨立顯示
同時這種作法 也大大加速了我們顯示整個網頁的速度
而這和我們的問題有甚麼關係呢?
在我們前端開發人員的聖經"High Performance Web Sites"中提到
我們應該盡量的把javascript放在網頁的下面
為甚麼呢 因為在同一個window的single thread中 如果遇到<script>
html parsing的動作會停下來 直到
1.下載 javascript(如果是外部連結的話)
2.parse
3.執行
三個動作結束後 才會繼續往下
如果這個javascript特別久 那下面網頁就久久不parse,整個page loading就卡在那裏
所以呢 你應該已經猜到 在你load page時 不同<script>間的javascript執行一定是分開
的
只有一段<script>跑完 才有機會繼續往下parse HTML
也才有機會遇到另外一個<script> 然後執行它
而這個部分 我相信每個人都可以直觀的觀察到 這是single thread的感覺
那為甚麼有人會提出這類的問題
我想主要是因為javascript的一些feature如ajax,timer,alert...等等造成困惑
要理解這些困惑 我們要先理解 javascript是怎麼被執行的
以下有兩種狀況會執行js
1.page load時立刻執行的js
2.event handler
第一種我們已經討論過了 很單純的由上往下 一個一個來
第二腫 在js中我們都視為一種callback 當事件引發時 才會執行
在browser對js的處理中 它maintain一個queue叫做 "Dispatch Sequence"
當事件觸發時 會立刻把handler放到裡面(這動作叫作dispatch)
然後根據先來後到的順序執行handler
而在這過程中 當前一個handler沒跑完之前 下一個hander不會被執行
所以說 js依然是single thread
timeout,或是ajax callback等等 我們都要視為是一個event 一樣是用這個規則在跑
所以 timeout 5秒不一定會在5秒時跑 ajax callback也不一定會在respose 抵達時馬上
fire
一切都要看 前面的handler執行完了沒 輪到他了沒
(題外話 alert 是個special case, 每個browser不太一樣 , 寫js的人要盡量少用)
那最後回到我們的問題來
那個alert ABCD會不會交叉出現呢 答案是不會 (alert要少用 像是sk1765的test case就
非常好)
相信你已經知道 在timeout中的function A B都是一個event handler(callback)
在執行時 會結束才有可能去執行另一個 所以不會ABCD交叉出現
最後我想說的是 js要看成是 event-driven的東西
用thread去分析 就會陷入把他拆成一行一行看的陷阱
而event-driven 產生的timing issue 對我來說 也是js bug中最難trace的一種
文章寫的有點長 但其實還有很多細節
opera這篇文章寫得非常非常好 有興趣的各位可以參考看看
https://dev.opera.com/articles/view/timing-and-synchronization-in-javascript/
※ 引述《TonyQ (自立而後立人。)》之銘言:
: ※ 引述《ec75413 (無虧/明月幾時有?)》之銘言:
: : 在這裡沒找到類似的討論串 網路上中文的也很少
: : 但英文還算不少
: : 所以把這個議題放上來。
: : 不知這個問題已經是老梗了 還是...?
: javascript 是同步的
: 也就是不會有兩行 statement 同時執行的
: 但是他可以是多執行續。
: 也就是假設你有一個 funciont 是
: function A(){
: alert("A");
: alert("B");
: }
: function B(){
: alert("C");
: alert("D");
: }
: 透過 setTimeout / setItnerval ,
: 是有可能會發生這樣的執行序
: alert("A");//from A
: alert("C");//from B
: alert("B");//from A
: alert("D");//from B
: 你把 js 底層的引擎想像成一個 queue ,
: 有要執行的指令就推進去,引擎會去跑他,
: 但同時間他只能處理一個指令。
: 一般當你真的很需要控制執行的順序的時候,
: 我們會多加幾個 flag 作為 lock ,或者自己實做queue。
: 但是基本上 javascript 要作到 java 的 synchronized keyword 做的事情,
: 是沒有辦法保證一定做的到的,最好盡量避免這麼嚴苛的狀況。:P
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 71.107.60.113
... <看更多>