iT邦幫忙

2023 iThome 鐵人賽

DAY 12
0

分享一些我覺得奇特的小知識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
總之也算是紀錄自己的一篇囉,分享給大家。


上一篇
第十一天 一點點變數提升一點點作用域
下一篇
第十三天 箭頭函式
系列文
Node.js隨手札記 想到什麼就說什麼的30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言