摘要:在中,一個函數(shù)可以作為另一個函數(shù)的參數(shù)。我們可以先定義一個函數(shù),然后傳遞,也可以在傳遞參數(shù)的地方直接定義函數(shù)。中函數(shù)的使用與類似。以上代碼中,我們把函數(shù)作為函數(shù)的第一個變量進(jìn)行了傳遞。
在JavaScript中,一個函數(shù)可以作為另一個函數(shù)的參數(shù)。我們可以先定義一個函數(shù),然后傳遞,也可以在傳遞參數(shù)的地方直接定義函數(shù)。
Node.js中函數(shù)的使用與Javascript類似。
function say(word) { console.log(word); } function execute(someFunction, value) { someFunction(value); } execute(say, "Hello");
以上代碼中,我們把 say 函數(shù)作為execute函數(shù)的第一個變量進(jìn)行了傳遞。這里傳遞的不是 say 的返回值,而是 say 本身!
這樣一來, say 就變成了execute 中的本地變量 someFunction ,execute可以通過調(diào)用 someFunction() (帶括號的形式)來使用 say 函數(shù)。
當(dāng)然,因為 say 有一個變量, execute 在調(diào)用 someFunction 時可以傳遞這樣一個變量。
node.js函數(shù)
1.不帶參的函數(shù) function sayhello(){ console.log("Hello World"); } sayhello() //運(yùn)行結(jié)果 Hello World 2.帶參的函數(shù) function sayyouwrite(youwrite){ console.log(youwrite); } sayyouwrite("你好") //運(yùn)行結(jié)果 你好 3.多個參數(shù)函數(shù) function sayyouwrite2(youwrite1,youwrite2,youwrite3){ console.log(youwrite1+youwrite2+youwrite3); console.log(youwrite1); console.log(youwrite2); console.log(youwrite3); } sayyouwrite("你好") // 運(yùn)行結(jié)果 // 你好!世界!中國! // 你好! // 世界! // 中國! 4.匿名函數(shù) function execute(someFunc, value) { someFunc(value) } execute(function (world) { console.log(world) }, "Hello world")
函數(shù)的調(diào)用
1.js文件內(nèi)部函數(shù)調(diào)用 var http = require("http") http.createServer(function (request, response) { // 發(fā)送 HTTP 頭部 // HTTP 狀態(tài)值: 200 : OK // 內(nèi)容類型: text/plain response.writeHead(200, {"Content-Type": "text/html;charset=utf-8"}); if(request.url="/favicon.ico"){ fun1(response); response.end("") } }).listen(8888); function fun1(res) { console.log("我是fun1") res.write("你好,我是fun1|") } // 終端打印如下信息 console.log("Server running at http://127.0.0.1:8888/"); 2.調(diào)用其他js文件內(nèi)的函數(shù) var http = require("http") var fun2 = require("./m2.js") http.createServer(function (request, response) { // 發(fā)送 HTTP 頭部 // HTTP 狀態(tài)值: 200 : OK // 內(nèi)容類型: text/plain response.writeHead(200, {"Content-Type": "text/html;charset=utf-8"}); if(request.url="/favicon.ico"){ fun1(response); fun2(response); response.end("") } }).listen(8888); function fun1(res) { console.log("我是fun1") res.write("你好,我是fun1|") } // 終端打印如下信息 console.log("Server running at http://127.0.0.1:8888/"); m2.js: function fun2(res) { console.log("我是fun2") res.write("你好,我是fun2") } module.exports = fun2;//只能引用一個函數(shù) 3.調(diào)用其他js文件中多個函數(shù) var http = require("http") var funx = require("./m2.js") http.createServer(function (request, response) { // 發(fā)送 HTTP 頭部 // HTTP 狀態(tài)值: 200 : OK // 內(nèi)容類型: text/plain response.writeHead(200, {"Content-Type": "text/html;charset=utf-8"}); if(request.url="/favicon.ico"){ fun1(response); funx.fun2(response); // funx.fun2(response); funx.fun3(response); response.end("") } }).listen(8888); function fun1(res) { console.log("我是fun1") res.write("你好,我是fun1|") } // 終端打印如下信息 console.log("Server running at http://127.0.0.1:8888/"); m2.js module.exports ={ fun2:function (res) { console.log("我是fun2") res.write("你好,我是fun2|") }, fun3:function (res) { console.log("我是fun3") res.write("你好,我是fun3") } }
同時我們也可以將m1.js文件里面的
????????
funx.fun2(response); funx.fun3(response); ? ? 替換為 ???????funx["fun2"](response); funx["fun3"](response); ? ? 或 ??? fname2 = "fun2"; fname3 = "fun3"; funx[fname2](response); funx[fname3](response);
函數(shù)傳遞是如何讓HTTP服務(wù)器工作的
var http = require("http"); http.createServer(function(request, response) { response.writeHead(200, {"Content-Type": "text/plain"}); response.write("Hello World"); response.end(); }).listen(8888); 等同于 var http = require("http"); function onRequest(request, response) { response.writeHead(200, {"Content-Type": "text/plain"}); response.write("Hello World"); response.end(); } http.createServer(onRequest).listen(8888);
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/104830.html
摘要:最后一直調(diào)用函數(shù)判斷節(jié)點是否被轉(zhuǎn)移到隊列上,也就是中等待獲取鎖的隊列。這樣的話,函數(shù)中調(diào)用函數(shù)就會返回,導(dǎo)致函數(shù)進(jìn)入最后一步重新獲取鎖的狀態(tài)。函數(shù)其實就做了一件事情,就是不斷嘗試調(diào)用函數(shù),將隊首的一個節(jié)點轉(zhuǎn)移到隊列中,直到轉(zhuǎn)移成功。 ?我在前段時間寫了一篇關(guān)于AQS源碼解析的文章AbstractQueuedSynchronizer超詳細(xì)原理解析,在文章里邊我說JUC包中的大部分多線程相...
摘要:全局范圍生效,不需要。解析本地路徑首先來為你介紹對象,可以先在控制臺中看一下每一個模塊都有屬性來唯一標(biāo)示它。通常是文件的完整路徑,但是在控制臺中一般顯示成。 showImg(https://segmentfault.com/img/remote/1460000009060869?w=1794&h=648); 本文作者:Jacob Beltran 編譯:胡子大哈 翻譯原文:http:...
摘要:問題什么是調(diào)用棧并且它是的一部分么調(diào)用棧當(dāng)然是的一部分。為什么理解是重要的因為你在每個進(jìn)程中只能獲取一個調(diào)用棧。它是一個從事件隊列中跳去事件的循環(huán)并且將它們的回調(diào)壓入到調(diào)用棧中。當(dāng)調(diào)用棧為空的時候,事件循環(huán)可以決定下一步執(zhí)行哪一個。 你并不知道Node 原文:You don’t know Node 譯者:neal1991 welcome to star my articles-tra...
Node.js從2009年誕生至今,已經(jīng)發(fā)展了兩年有余,其成長的速度有目共睹。從在github的訪問量超過Rails,到去年底Node.jsS創(chuàng)始人Ryan Dalh加盟Joyent獲得企業(yè)資助,再到今年發(fā)布Windows移植版本,Node.js的前景獲得了技術(shù)社區(qū)的肯定。InfoQ一直在關(guān)注Node.js的發(fā)展,在今年的兩次Qcon大會(北京站和杭州站)都有專門的講座。為了更好地促進(jìn)Node.j...
摘要:一個標(biāo)準(zhǔn)性的事件就是年的橫空出世。引擎快速處理能力和異步編程風(fēng)格,讓開發(fā)者從多線程中解脫了出來。其次,通過異步編程范式將其高并發(fā)的能力發(fā)揮的淋漓盡致。它也僅僅是一個處理請求并作出響應(yīng)的函數(shù),并無任何特殊之處。 showImg(https://segmentfault.com/img/remote/1460000010819116); 在正式學(xué)習(xí) Express 內(nèi)容之前,我們有必要從大...
閱讀 736·2023-04-25 19:43
閱讀 3981·2021-11-30 14:52
閱讀 3807·2021-11-30 14:52
閱讀 3871·2021-11-29 11:00
閱讀 3802·2021-11-29 11:00
閱讀 3904·2021-11-29 11:00
閱讀 3580·2021-11-29 11:00
閱讀 6184·2021-11-29 11:00