分享一些我覺得奇特的小知識XD
不知道是不是JS每個版本差異都過大的關係,一種寫法我真的都可以看到好幾種不同的表示方式,老實說這讓我覺得有點困擾XD
我認為好閱讀的方式,好像寫習慣JS的開發者會覺得是過時的寫法(不夠潮??)
接著我把一些我在PHP沒看到的寫法拿回去塞在PHP 居然也能行得通XDD
真的是長見識了
以下就是一些小分享
//node
function sayHello() {
console.log('Hello!');
}
let greeting = sayHello;
greeting();
//輸出Hello!
當我看到這個寫法,感到很困惑,這樣塞過去,再把新的變數當function call的時候...居然能夠成功
於是我拿去php測試
//php
function sayHello() {
echo 'Hello!';
}
$greeting = 'sayHello'; //塞字串進去
$greeting(); // 把他當function 居然也行! 輸出 Hello!
接下這個例子是針對node 閉包的解釋 跟PHP寫法對應
根據MDN的解說,我懶人包解釋
他就是可以去訪問函數以外的變數
node版本
//node
function init() {
var name = "Mozilla"; // name 是個由 init 建立的局部變數
function displayName() {
// displayName() 是內部函式,一個閉包
console.log(name);; // 使用了父函式宣告的變數
}
displayName();//Mozilla
}
init();
PHP版本
//php
$init = function() {
$name = "Mozilla";
$displayName = function() use ($name) {
echo $name;
};
$displayName();
};
$init();
接下來再看一個例子
const materials = ['Hydrogen', 'Helium', 'Lithium', 'Beryllium'];
function getLength(xxx) {
return xxx.length;
}
console.log(materials.map(getLength)); //[ 8, 6, 7, 9 ]
接著我突然對於function傳遞的時候不用+()的方式,感到有點好奇,接著去找一下資料
接著發現JS的函數,是被稱作一等公民的存在。
這是關於一等公民的定義
In general, a value in a programming language is said to have first-class status if it can be passed as a parameter, returned from a subroutine, or assigned into a variable.
簡單來說,在JS的世界裡面,函數是一等公民,就像字串一樣,可以拿來當參數傳遞
或許對於某些人而言,這些寫法滿正常的,但我資淺XD
總之也算是紀錄自己的一篇囉,分享給大家。