導航:首頁 > 編程語言 > javascriptcallee

javascriptcallee

發布時間:2023-08-30 19:27:20

A. 一段文字,每個字有不同的顏色javascript函數代碼怎麼寫

/* 隨機獲取顏色 */
function getColor()
{
return (
function(m,s,c)
{
return (c>0 ? arguments.callee(m,s,c-1): '#') + s[m.floor(m.random() * 16)]
}
)(Math, ['1','2','3','4','5','6','7','8','9','0','a','b','c','d','e','f'], 5);
}

var _str = "每個字的顏色都不一樣?sdna,sjdansdnasdlhasdnas,dmas,das,'jqlwjkqlwjqlwjewq;alsdfjafa,as da,sdn alsd hasldhalsd halsdk asldkjasld alskd alsdkj alsdk alsdk alskd jalasdklj alkd asl;d jasldj asldk jaklsdj als;kdj as.";

var arr = _str.split("");
var str = "";
for(var i=0,len=arr.length; i<len; i++)
{
str += '<span style="color:'+getColor()+';">'+arr[i]+"</span>";
}

B. js中變數後面有個問號是什麼意思

這個是三元操作符,它在每一種語言中的功能和語法都是一樣的專。

舉例:int a=3;int b=5;

int c= a>b?1:0;

解釋:a大於屬的話,c就等於1,否則的話c等於0;

?是判斷的意思,: 是否則的意思。

(2)javascriptcallee擴展閱讀:

三元操作符格式

如名字表示的三元運算符需要三個操作數。

語法為:條件表達式?表達式1:表達式2。

說明:問號前面的位置是判斷的條件,判斷結果為bool型,為true時調用表達式1,為false時調用表達式2。

其邏輯為:「如果條件表達式成立或者滿足則執行表達式1,否則執行第二個。」常用在設置默認值,例如某個值不一定存在,則判斷這個值是否存在,不存在給默認值(表達式2)。

C. js嚴格模式為什麼要禁用callee

早起版本的 JavaScript 沒有具名函數表達式(named function expression),所以在函數表達式里么沒有辦法實現遞歸。

比如下面實現階乘的函數:

functionfactorial(n){
return!(n>1)?1:factorial(n-1)*n;}[1,2,3,4,5].map(factorial);


如果寫成函數表達式的話:


[1,2,3,4,5].map(function(n){
//這里要怎樣遞歸?
});


所以添加了 arguments.callee 來實現對執行函數本身的調用:


[1,2,3,4,5].map(function(n){
return!(n>1)?1:arguments.callee(n-1)*n;
});

但是現在的JavaScript 支持了具名函數表達式:


[1,2,3,4,5].map(functionfactorial(n){
return!(n>1)?1:factorial(n-1)*n;
});


這樣寫有以下的好處:


同時,使用 arguments.callee 還會帶來函數引用優化問題和尾遞歸優化的問題。


以上部分內容資料來自:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode

http://stackoverflow.com/questions/103598/why-was-the-arguments-callee-caller-property-deprecated-in-javascript

D. 關於JavaScript中argument.caller的理解問題!謝謝!

首先要分清caller和callee,arguments.callee返回當前正在執行的函數,function.caller返回函數的調用體所在函數。

隨便弄了個示例代碼

functionparentCheck(){
check("");
functioncheck(){
subCheck();
functionsubCheck(){
console.log(arguments.callee);
console.log(subCheck.caller.caller)
}
}
}
parentCheck();

arguments.callee返回subCheck的函數體,subCheck.caller返回調用subCheck的函數,即check,而再往上一層,subCheck.caller.caller就是返回調用check的函數體,也就是parentCheck。那如果是繼續往上一層呢?subCheck.caller.caller.caller?就會變成null。書里也有講,arguments.caller在非嚴格模式下永遠是undefined。我們就可以判斷值是null還是undefined來區分arguments.caller和函數的caller。

JS的函數是可以無限嵌套的,就構成了一棵樹,而function.caller就提供了一個訪問父節點的方法,通過靈活應用function.caller,我們甚至可以用腳本畫出整棵樹,只要我們在任意地方成功插入一段JS代碼,又或者是,像網站統計之類的第三方代碼,我們就能窺視其他代碼。

所以為了安全期間,嚴格模式禁止調用caller、callee、arguments變數,在瀏覽器中的報錯為

UncaughtTypeError:'caller','callee',and'arguments'rcallstothem

個人敝見,無書可循,希望對您有幫助

E. javascript中,用什麼方法能夠在本函數內部獲取到自己的函數名

arguments.callee 為指向自己的函數,可想相面這樣實現遞歸的軟編碼,樓上說的ie不支專持是ie不支持函數的name屬性

functionrecursion(){
auruments.callee();
}

但是在ES5嚴格屬模式中這種方式不再被支持

F. javascript關於arguments.callee

arguments.length 是實參長度

arguments.callee.length 是形參長度

這里有個簡單的例子,是比較參數的版長權度的:
function test(x,y,z)
{
checkArgu(arguments);
return x+y+z;
}

function checkArgu(argu)
{
var argu_test1, argu_test2;
argu_test1 = argu.length;
argu_test2 = argu.callee.length;
if(argu_test1 == argu_test2)
alert("yes");
else
alert("no");
}

test(1,2,3);
test(1,2,3,4);

閱讀全文

與javascriptcallee相關的資料

熱點內容
win10改變文件格式 瀏覽:475
linux中的物理地址和虛擬地址 瀏覽:493
有哪些app可以接游戲訂單 瀏覽:472
蘋果硬碟數據恢復要多少錢 瀏覽:394
js綁定下拉框資料庫數據 瀏覽:448
cad文件怎麼復制到另一個文件里邊 瀏覽:858
dxp鑽孔文件 瀏覽:631
iphone大悅城換機 瀏覽:538
找結婚對象上什麼網站 瀏覽:974
學生信息管理系統程序設計報告 瀏覽:640
微信文件怎麼刪除怎麼恢復 瀏覽:407
編程程序怎麼復制 瀏覽:467
文件更改 瀏覽:327
冰點文件路徑 瀏覽:730
軟體一點開文件就關閉 瀏覽:88
網路如何把人捧紅 瀏覽:961
軟體傳輸文件 瀏覽:184
密碼記錄器ios 瀏覽:412
兩個電腦數據怎麼一樣 瀏覽:829
順豐有什麼買東西的app 瀏覽:377

友情鏈接