① 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函数申明时候,调用就可以直接加 ()
这里可以看出无论是命名函数还是匿名函数,都是函数申明,而直接对匿名函数加 () 之后,解释器就不能理解而报错了
要自调用匿名函数,就需要把匿名函数声明语句变成一个表达式