2018/06/19

้œๆ…‹่ฎŠๆ•ธ

้›–็„ถ็พๅœจๆๅ€ก็‰ฉไปถๅฐŽๅ‘,ไฝ†ๅถ็ˆพไนŸๆœƒๆœ‰ไธ€ไบ›็‰นๆฎŠๆƒ…ๆณๆœƒ้‡่ค‡ๆ€ง็š„ๅ‘ผๅซไธ€ไบ› function,ๅฆ‚ๆžœๅœจไธ€ๅ€‹ๆ•ธ้‡็‚บ 10 ็š„่ฟดๅœˆ่ฃก้ขๅ‘ผๅซไธ€ๅ€‹ function,้‚ฃ่ฉฒ function ๅฐฑๆœƒ่ขซ call ๅๆฌก,ๅ‡่จญ่ฉฒ function ็š„ๆŸไบ›็ตๆžœ,ไพ‹ๅฆ‚่ชชๆ’ˆๅ–่ณ‡ๆ–™ๆ˜ฏๅŒไธ€ไปถไบ‹็š„่ฉฑ,ๅ…ถๅฏฆๆฒ’ๅฟ…่ฆไนŸๅ‘ผๅซๅๆฌก,PHP ็š„ static ๅฏไปฅๅพˆๆœ‰ๆ•ˆ็އ็š„่งฃๆฑบ้€™ไปถไบ‹ๆƒ…

PHP
<?php

function getData($number)
{
    static $dataFromDatabase;

    if (!isset($dataFromDatabase)) {
        echo 'init', PHP_EOL;
        $dataFromDatabase = 'This is data';
    }

    return sprintf(
        '%s %s',
        $dataFromDatabase,
        $number
    );
}

for ($i = 0; $i < 10; $i++) {
    echo getData($i), PHP_EOL;
}

ๅŸท่กŒ็ตๆžœ

init
This is data 0
This is data 1
This is data 2
This is data 3
This is data 4
This is data 5
This is data 6
This is data 7
This is data 8
This is data 9

ๅ‡ๅฆ‚ๆŠŠ static $dataFromDatabase; ๆ‹ฟๆމๅฐฑๆœƒ็œ‹ๅˆฐๅๆฌก init,ๅฐๅ›บๅฎš่ณ‡ๆ–™ไพ†่ฌ›็š„่ฉฑๅฐฑๆ˜ฏๅพˆๆฒ’ๅฟ…่ฆ็š„่ณ‡ๆบๆตช่ฒป,python ไปฅๅŠ node.js ๆฒ’ๆœ‰้€™ๆจฃ็š„ๅฎฃๅ‘Šๆ–นๅผ,ไฝ†ๆœ‰่ฝ‰ๅฝŽ็š„ไฝœๆณ•

python
# -*- coding: utf-8 -*-

def get_data(number):
    if not hasattr(get_data, 'data_from_database'):
        print('init')
        get_data.data_from_database = 'This is data'

    return '%s %s' % (get_data.data_from_database, number)

for i in range(10):
    print(get_data(i))
node.js
function getData(number) {
    if (getData.dataFromDatabase === undefined) {
        console.log('init');
        getData.dataFromDatabase = 'This is data';
    }

    return `${getData.dataFromDatabase} ${number}`;
}

for (let i = 0; i < 10; i++) {
    console.log(getData(i));
}