導航:首頁 > 編程語言 > 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相關的資料

熱點內容
漫一網路培訓學校有哪些 瀏覽:752
酷狗app如何在電腦同步播放 瀏覽:668
雲浮微信群 瀏覽:344
公司文件打不開 瀏覽:267
LOL的設置文件在哪裡 瀏覽:254
線上開庭是什麼app 瀏覽:526
新中大軟體怎麼設置文件夾 瀏覽:807
git刪除文件夾 瀏覽:353
皇室戰爭怎麼升級競技場 瀏覽:447
雅虎統計工具 瀏覽:741
edgepdf文件分類 瀏覽:901
cad為什麼捕捉不到外部參照文件 瀏覽:935
重慶一共有多少個網站 瀏覽:34
k8s配置文件env創建失敗 瀏覽:197
編程序在電腦上叫做什麼 瀏覽:92
qq閱讀可賺 瀏覽:21
怎樣查找web儲存文件圖片 瀏覽:681
人口檔案資料庫包括什麼信息 瀏覽:709
手機有什麼好玩的星戰網路游戲 瀏覽:15
ps怎麼弄成轉曲文件 瀏覽:281

友情鏈接