① javaSCRIPT中的匿名函數指的是沒有名字的函數嗎,有何作用啊,在代碼文本中作用域有多大啊。是
js">//作用域和匿名函數沒用任何關系
//js中函數內的變數在函數內的任何地方都能訪問
//window對象下定義的變數均為全局變數,如:
vari=1;//這個變數就是全局變數
functionfun(){
varj=1;//這個j是局部變數,在fun裡面的任何地方都能訪問
}
//說匿名函數
$(function(){
//這個function(){}就是匿名函數
});
varfun1=function(){
//這個function(){}也是匿名函數
}
//論匿名函數的重要性
//js中的匿名函數的重要性不亞於三元運算
//不過js中任何能用匿名函數實現的代碼用普通函數都能實現
//就好比任何三元運算都能用if實現一樣
$("body").click(function(){
//jquery最基本的綁定click事件的一種
});
//上面這里用的就是匿名函數,可以用下面的代碼代替
functionclickHandle(){
}
$("body").click(clickHandle);
//說自運行函數
(function(){
//這里還是匿名函數
})();
//上面的自運行函數(閉包操作)可以改成下面這樣
functiontempFun(){
}
tempFun();
//有幫助的話麻煩採納下,手打不易,謝謝!
② js匿名函數與普通定義的函數有什麼區別
在調用上來,這兩種方式自定義的函數完全沒有區別。如果要說區別,在定義時的相互覆蓋上,會有一定的差異。例如同時使用下面幾種方式同時定義同名的函數及變數:
1、
functiontest(){2}
vartest=function(){1};
2、
vartest=function(){1};
functiontest(){2}
3、
vartest=function(){1};
vartest=function(){2};
4、
functiontest(){1}
functiontest(){2}
你可以嘗試一下上面定義時最終test是什麼。
③ javascript中匿名函數何時用
JS中的匿名函數的用法及優缺點 匿名函數可以有效的保證在頁面上寫入Javascript,而不會造成全局變數的污染。 這在給一個不是很熟悉的頁面增加Javascript時非常有效,也很優美。 一、什麼是匿名函數? 在Javascript定義一個函數一般有如下三種方式: 函數關鍵字(function)語句: function fnMethodName(x){alert(x);} 函數字面量(Function Literals): var fnMethodName = function(x){alert(x);} Function()構造函數: var fnMethodName = new Function('x','alert(x);') 上面三種方法定義了同一個方法函數fnMethodName, 第1種就是最常用的方法,後兩種都是把一個函數復制給變數fnMethodName,而這個函數是沒有名字的,即匿名函數。 實際上,相當多的語言都有匿名函數。 二、函數字面量和Function()構造函數的區別 雖然函數字面量是一個匿名函數,但語法允許為其指定任意一個函數名,當寫遞歸函數時可以調用它自己,使用Function()構造函數則不行。
④ JavaScript 匿名函數有哪幾種執行方式
JavaScript的函數定義分為函數聲明和函數表達式。
表達式語句不得以 function 或者 { 開頭:
ExpressionStatement → [lookahead ∉ {{, function}] Expression;
」裸寫「成function fname() { }的,是函數聲明,它不能是匿名的。
var c = 1;
function test(x) {
console.log(x);
}
// 調用
test(x);
嵌套定義的函數也可以是函數聲明。
// innder、outer都是函數聲明,只不過外界無法使用inner函數。。
function outer() {
var x = 1;
function inner() {
console.log("Hi");
}
}
函數作為表達式出現、或者作為其他表達式的一部分時才是函數表達式(有點繞。。),此時函數可以是匿名或者有名的。
比如賦值表達式的右邊;()和[]裡面;!等符號後面;return語句後面;。。
var foo = function() {
...
};
(function foo() {});
[Function bar() {}];
function outer() {
var x = 1;
return function inner() {
console.log(x);
}
}
描述不同語法結構的語義時,主要和表達式的求值相關。比如賦值的時候需要對=右邊的表達式求值,return的時候需要對return後面的求值。
函數表達式的值可以是一個函數對象,或者對這個函數對象進行調用(也就是執行它)產生的結果。
// =右邊表達式的」值「是一個函數對象,賦給t。不發生函數調用
var t = function () {
console.log(3);
};
// =右邊表達式,先創建函數對象再調用它。t是5
var t = function (x) {
return x + 2;
}(3);
函數聲明自身不能「求值」。
⑤ javascript 中 匿名函數後面括弧中函數怎麼調用 是什麼意思 (function(){ }(this, function(obj){ }))
它可以解釋成為「匿名函數自調用」,也就是說,定義一個匿名函數,然後馬上調用它(因為它是匿名的,如果不立即調用就獲取不到該函數的引用了)。通常它被應用在一些大型的JS框架中(如上面所說的),因為這個匿名函數的函數體相當於提供一個匿名的名字空間,這樣就不會再與用戶自定義的JS函數、變數、對象發生沖突了。盡管JS沒有顯示地提供命名空間的定義和使用機制,但這種匿名方式卻不失為是一種很好的解決命名空間問題的方法。
所以說,(function(){代碼})()就等於執行了一個函數,只不過它是匿名的而已。如果在這個匿名函數內部想再次調用這個函數,就需要調用constructor屬性了(這是Object中定義的,JS的繼承機制如同Java一樣保證了了所有對象都繼承Object類)。
⑥ javascript中匿名函數和普通函數的區別
匿名函數在聲明時不用帶上函數名, 可以把匿名函數當作一個function類型的值來對待內
聲明一個普通的函數 function func() { ... } 可以容認為和var func = function() { ... };相同, 但是普通函數會自動把函數名"提到"作用域的最前面, 基本上普通函數和匿名函數就只有這一個區別
function xxx() {
foo(); //foo被提到了作用域的最前面, 於是這里可以正常調用foo函數
bar(); //這里會報錯bar是個undefined
function foo(){}
var bar = function(){};
}
⑦ Javascript中{ init( ); }是什麼意思
init( );是一個函數。
window.onload = function(){ init( ); }就是說在文檔載入完後,調用函數init();
如果不調用函數init();它裡面的代碼就不會執行,所以就顯示不了alert(TestStrC)。
JavaScript 函數:就是包裹在花括弧中的代碼塊,前面使用了關鍵詞 function,當調用該函數時,會執行函數內的代碼。可以在某事件發生時直接調用函數(比如當用戶點擊按鈕時),並且可由 JavaScript 在任何位置進行調用。
函數語法:
function functionname()
{
這里是要執行的代碼
}
⑧ 怎樣在JavaScript使用匿名函數為定時器傳遞參數
在使用JavaScript的時候,有時需要間隔地執行一個方法,例如用來產生網頁動畫特效。這時常常會使用方法setInterval或setTimeout,但是由於這兩種方法是由腳本宿主模擬出來的Timer線程,通過其調用的方法是不能為其傳遞參數的。本節代碼主要使用了 onClick 事件、setTimeout 方法和 alert 方法,主要功能和用法如下:
工具/原料
Windows + 瀏覽器 +Adobe Dreamweaver
步驟/方法
當用滑鼠單擊頁面的標簽時,onClick 事件會被觸發。該事件可以調用相應的函數,作為其事件處理函數。在函數中,可以是任意合法的JavaScript代碼。
setTimeout 方法在執行時是在載入後延遲指定時間後,去執行一次表達式,僅執行一次。
alert 方法有一個參數,即希望對用戶顯示的文本字元串,該字元串不是 HTML 格式。該消息框提供了一個「確定」按鈕讓用戶關閉該消息框,並且該消息框是模式對話框,也就是說,用戶必須先關閉該消息框然後才能繼續進行操作。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>使用匿名函數為定時器傳遞參數</title>
<script language="javascript">
var userName = 'jack'; //根據用戶名顯示歡迎信息
function hello(_name)
{
alert('hello, ' + _name);
}
function _hello(_name) //創建一個函數,用於返回一個無參數函數
{
return function() {
hello(_name);
}
}
function foo() //函數:直接調用
{
window.setTimeout(hello(userName), 3000); //直接調用hello函數
}
function bar() //函數:間接調用
{
window.setTimeout(_hello(userName), 3000); //使用匿名函數為定時器傳遞參數
}
</script>
</head>
<body>
<center>
<h1>使用匿名函數為定時器傳遞參數</h1>
<hr>
<br>
<h5>單擊相應按鈕...</h5>
<form name="form1" method="post" action="">
<label>
<input type="button" onClick="foo()" name="button" id="button" value="hello">
</label>
<label>
<input type="button" onClick="bar()" name="button2" id="button2" value="_hello">
</label>
</form>
</center>
</body>
</html>
運行該程序後,頁面中出現一組按鈕,單擊第一個按鈕時立即彈出相應的消息框,如下圖所示。單擊「OK」按鈕關閉消息框後單擊第二個按鈕,三秒鍾後才彈出相應的消息框,如下圖所示。
END
注意事項
在函數foo()中,使用 setTimeout 方法延時調用hello函數並傳入參數。其實這樣調
用是錯誤的,因為以string literals形式的方法調用,param 必須是全局變數(即 window 對象上的變數)才行;而function pointer 形式的調用,完全錯誤了,這是把函數的返回值當成了setTimeout/setInterval函數的參數了,完全不是所期望的結果。
⑨ JavaScript 匿名函數有哪幾種執行方式
期望是立即調用一個具名函數表達式,結果是聲明了函數 g。末尾的括弧作為分組運算符,必須要提供表達式做為參數。
所以那些匿名函數附近使用括弧或一些一元運算符的慣用法,就是來引導解析器,指明運算符附近是一個表達式。
按照這個理解,可以舉出五類,超過十幾種的讓匿名函數表達式立即調用的寫法:( function() {}() );
( function() {} )();
[ function() {}() ];
~ function() {}();
! function() {}();
+ function() {}();
- function() {}();
delete function() {}();
typeof function() {}();
void function() {}();
new function() {}();
new function() {};
var f = function() {}();
1, function() {}();
1 ^ function() {}();
1 > function() {}();
⑩ js匿名函數自調用
對於一個js匿名函數
自調用這個匿名函數
這樣解釋器會報錯
為什麼呢? 原因可以看一個普通js函數的調用
這是一個函數聲明,如果在這么一個聲明後直接加上括弧調用,解析器不能理解而會報錯:
而a函數申明時候,調用就可以直接加 ()
這里可以看出無論是命名函數還是匿名函數,都是函數申明,而直接對匿名函數加 () 之後,解釋器就不能理解而報錯了
要自調用匿名函數,就需要把匿名函數聲明語句變成一個表達式