eval函式裡面執行函式傳參

2021-10-04 05:06:08 字數 721 閱讀 2507

function

test2

(a,b)

var r =[1

,3];

var n =

eval

('test2('

+r+')'

);

一般理解eval函式可以將字串轉化為js**執行,一開始理解這裡會將r當作乙個陣列傳遞到函式裡去,然而雖然,這裡r定義為乙個陣列,

但在拼接後轉化為字串,eval函式在執行的時候會預設識別字串裡的陣列元素,逐個傳遞引數 ,好比在 這裡執行了es6的展開操作符…

var m =[1

,2,4

,5];

var i =0;

var n =

'm['

+i+']'

;var psy =

; psy.

push

(n);

console.

log(psy,

'psy');

function

fn(d)

console.

log(

eval

('fn('

+psy+

')')

);

通過以上的講解 不難理解 這裡為什麼一直報錯了,這裡psy雖然是乙個陣列,但是執行的過程中 已經被展開了 這裡的d實際上是陣列的第乙個元素

maya mel裡面button 函式傳參問題

mel裡面直接使用帶參函式是沒有問題的,和其他語言一樣,但是用到button的時候就會有奇怪的寫法 因為要改寫乙個mel指令碼,所以又繼續看了mel的button帶參問題 如果是按鈕 要有返回值 必須先有括號 裡面的除了變數之外的東西必須用引號包圍 下面是乙個引數的情況 showwindow myt...

函式傳值傳參

var obj function x 內部宣告的變數不會影響外面的obj物件 console.log obj.n 2 obj 傳入的是乙個指標 值 x是obj指標的副本,兩者都指向同乙個物件 console.log obj.n 3 例子二 var x 1 function a x a x conso...

在計時器裡面給函式傳參

函式如果是帶括號的話就是直接呼叫函式,返回的是整個函式體,函式會立即執行,如果是不帶括號其實是呼叫了函式名,函式名就相當於乙個指向函式的指標,而不是函式本身。所有在計數器帶引數或者有括號時函式會立即執行,計時器就不起作用了,這樣肯定是不行的,解決辦法是 在函式外面再套一層函式,返回你要執行的函式 t...