2020年6月9日 星期二

《面試官別再問》JavaScript 動態變數怎麼寫,動態呼叫function函式

//在全域宣告一個變數,他會跑進window的物件中,我們把該變數當作特性去讀寫他
//過程:
var i = "0";
this['str'+i] = 100;
//結果:
console.log(str0); //會回傳100

//function內也是一樣
function func(){
var a = '123';
for(i=0;i<=5;i++){
this['a'+i] = i;
console.log(this['a'+i]);
}
}
func();
//會印出6次結果,分別是0~5

PHP變數和函數的特異功能

  • for-loop 中最常使用到動態變數
<?php
// price name list
$priceNameList = array('Original', 'VIP', 'Employee');

// price list
$priceList = array(300, 200, 100);
$total = count($priceList);
// dump priceList to meaningful variable name;
for ($i=0; $i < $total; $i++) {
    ${'price'.$priceNameList[$i]} = $priceList[$i];
}

echo 'oringial price: ' . $priceOriginal . "\n";

這樣就可以將變數的名稱做有意義的命名,當然也可以透過 array key value的方式做到。
$priceDictionary = array("Original" => 300,
                         "VIP" => 200,
                         "Employee" => 100);
foreach ($priceDictionary as $key => $value) {
    ${'price'.$key} = $value;
}
echo 'demo 2: oringial price: ' . $priceOriginal . "\n";
更進階的方法,PHP中提供了一個很特別的函式extract(),只要一行就可以做到我們的需求:
extract($priceDictionary, EXTR_PREFIX_ALL, "price");
echo 'demo 3: oringial price: ' . $price_Original . "\n";
這裡需要特別注意的地方是,extract()參數,預設值是 EXTR_OVERWRITE,會把既有變數的值覆蓋。另外 EXTR_PREFIX_ALL 變數會有 _ i.e $price_Original 而不是 $priceOriginal
有關extract()參數請參考 extract manual