189 8069 5689

c语言匿名函数的作用域 什么函数也称为匿名函数

for(var i=0;i

for(var i=0;i=3;i++){ setTimeout(function() { console.log(i) }, 10);}

创新互联专业为企业提供会昌网站建设、会昌做网站、会昌网站设计、会昌网站制作等企业网站建设、网页设计与制作、会昌企业网站模板建站服务,十余年会昌做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

答案:打印4次4

这道题涉及了异步、作用域、闭包

settimeout是异步执行,10ms后往任务队列里面添加一个任务,只有主线上的全部执行完,才会执行任务队列里的任务,当主线执行完成后,i是4,所以此时再去执行任务队列里的任务时,i全部是4了。对于打印4次是:

每一次for循环的时候,settimeout都执行一次,但是里面的函数没有被执行,而是被放到了任务队列里面,等待执行,for循环了4次,就放了4次,当主线程执行完成后,才进入任务队列里面执行。

(注意:for循环从开始到结束的过程,需要维持几微秒或几毫秒。)

当我把var 变成let 时

for(let i=0;i=3;i++){ setTimeout(function() { console.log(i) }, 10);}

打印出的是:0,1,2,3

当解决变量作用域,

因为for循环头部的let不仅将i绑定到for循环快中,事实上它将其重新绑定到循环体的每一次迭代中,确保上一次迭代结束的值重新被赋值。setTimeout里面的function()属于一个新的域,通过 var 定义的变量是无法传入到这个函数执行域中的,通过使用 let 来声明块变量,这时候变量就能作用于这个块,所以 function就能使用 i 这个变量了;这个匿名函数的参数作用域 和 for参数的作用域 不一样,是利用了这一点来完成的。这个匿名函数的作用域有点类似类的属性,是可以被内层方法使用的。

查了一下百度的一个答案:

setTimeout是一次执行函数,这里是10ms后执行,仅仅执行一次;for(var i=0;i=3;i++),i的每次取值都是执行setTimeout这个函数,并没有执行setTimeout里面的function(即闭包函数),setTimeout里面的function是有setTimeout的定时触动的,也就是10ms后执行,也就是说i从0~3时,一共执行了4次的setTimeout()函数,此时的i的值是4,由于for语句的执行速度远小于1秒,所以,1秒后,由setTimeout()函数定时触动的闭包函数function()开始执行,alert(i);i的值已经是4了,所以相继打印4次i.

匿名函数的好处与作用

匿名函数:定义时未定义函数的名称

闭包: 创建时封装周围状态的函数,及时周围的环境不存在了,闭包中的状态还会存在

从理论上讲 匿名函数和闭包属于两种概念,PHP中视为相同

1.非匿名函数在定义时就创建函数对象和作用域对象。以后及时未调用,也占空间

2.匿名函数只有在调用时,才会创建函数对象和作用域对象。调用完后立即释放,节省内存。适合做回调函数

javascript中: (function(){})();如何理解?

javascript中: (function(){})()是匿名函数,主要利用函数内的变量作用域,避免产生全局变量,影响整体页面环境,增加代码的兼容性。

(function(){})是一个标准的函数定义,但是没有复制给任何变量。所以是没有名字的函数,叫匿名函数。没有名字就无法像普通函数那样随时随地调用了,所以在他定义完成后就马上调用他,后面的括号()是运行这个函数的意思

扩展资料

函数声明:使用function声明函数,并指定函数名。 

function setFn() {    // coding   }

函数表达式:使用function声明函数,但未指定函数名,将匿名函数赋予一个变量。

var setFn = function() {    // coding}

匿名函数:使用function关键字声明函数,但未指定函数名。匿名函数属于函数表达式,匿名函数有很多作用,赋予一个变量则创建函数,赋予一个事件则成为事件处理程序或创建闭包等等。

function() {    // coding}

参考资料:百度百科 - javascript

匿名函数、函数作用域

函数的另外一种表现形式,还是函数,只适用于函数功能比较简单的函数(声明的格式和普通的函数不一样)

就是变量能够使用的范围

a = 520

在函数中:

global 变量名

变量名 = 值

语法:

nonlocal 局部变量

局部变量 = 值

python中声明函数其实就是声明一个数据是function的变量,函数名就是变量名

对比如下:

变量作为函数的返回值

函数1作为函数2的返回值 - 函数2是返回值高阶函数

JAVASCRIPT中的匿名函数指的是没有名字的函数吗,有何作用啊,在代码文本中作用域有多大啊。是

//作用域和匿名函数没用任何关系

//js中函数内的变量在函数内的任何地方都能访问

//window对象下定义的变量均为全局变量,如:

var i = 1;    //这个变量就是全局变量

function fun(){

var j = 1;    //这个j是局部变量,在fun里面的任何地方都能访问

}

//说匿名函数

$(function(){

//这个function(){}就是匿名函数

});

var fun1 = function(){

//这个function(){}也是匿名函数

}

//论匿名函数的重要性

//js中的匿名函数的重要性不亚于三元运算

//不过js中任何能用匿名函数实现的代码用普通函数都能实现

//就好比任何三元运算都能用if实现一样

$("body").click(function(){

//jquery最基本的绑定click事件的一种

});

//上面这里用的就是匿名函数,可以用下面的代码代替

function clickHandle(){

}

$("body").click(clickHandle);

//说自运行函数

(function(){

//这里还是匿名函数

})();

//上面的自运行函数(闭包操作)可以改成下面这样

function tempFun(){

}

tempFun();

//有帮助的话麻烦采纳下,手打不易,谢谢!


标题名称:c语言匿名函数的作用域 什么函数也称为匿名函数
标题路径:http://cdxtjz.cn/article/doogghg.html

其他资讯