函数

vg棋牌在线-JavaScript基础篇(6)之函数表达式闭包

作者: 2021-03-05 我要评论

其实js支持vg象棋在线的主要原因是js需要函数来保存数据。这里保存的数据是,函数运行后,只保存函数中变量的值。至于js为什么需要在函数中存储数据,那是函数式语...

其实js支持vg象棋在线的主要原因是js需要函数来保存数据。这里保存的数据是,函数运行后,只保存函数中变量的值。至于js为什么需要在函数中存储数据,那是函数式语言。在函数中保存数据是函数式语言的一个主要特征。

functiosu的函数声明语法定义(numnumreturnunum///)

vasuffunction(numnumnum)返回unum }//函数表达式定义

vasunefunction(' num ' ' num ' ' return unum ')//functiono构造函数

sayHi();//错误:函数尚不存在

var sayHi=function () {

警报('测试');

};

if (true) {

函数sayHi() {

警报(' 1 ');

}

} else {

函数sayHi() {

警报(' 2 ');

}

}

sayHi();//打印出来的结果不是我们想要的

var fun 1=fun 2(){

警报('测试');

}

fun 2();//错误:函数尚不存在

在示例1中,我们不能在使用函数声明性语法定义之前调用函数。解决方案:

1.如果使用函数表达式定义函数,需要在表达式定义后调用。

var sayHi=function () {

警报('测试');

};

sayHi()

2.使用函数声明。(这里浏览器引擎会提升函数声明,在所有代码执行之前读取函数声明。)

sayHi();

函数sayHi () {

警报('测试');

};

if (true) {

函数sayHi() {

警报(' 1 ');

}

} else {

函数sayHi() {

警报(' 2 ');

}

}

sayHi();//打印出来的结果不是我们想要的

为什么会这样?由于函数声明的提升,浏览器在预解析时不会判断if条件,直接解析第二个函数定义,覆盖第一个。

var sayHi

if (true) {

sayHi=function () {

警报(' 1 ');

}

} else {

sayHi=function () {

警报(' 2 ');

}

}

sayHi();

在例3中,发现只能调用fun1(),不能调用fun2()。

因为1:function fun 3(){ };相当于var fun 3=fun 3()函数{ };如图:

既然fun2不能在外部调用,为什么可以在函数内部调用?即使你仍然不能在调试器中得到乐趣。

fun() {

Var a='vg象棋在线';

}

fun();//在我们完成执行之后,变量A被标记为销毁

fun() {

Var a='vg象棋在线';

return function () {

警报('测试');

}

}

var f=fun();//同样,我们执行之后,变量A被标记为销毁。

fun() {

Var a='vg象棋在线';

return function () {

alert(a);

}

}

var f=fun();//【现在情况变了。如果A被破坏,显然如果F被调用,变量A的值就不能被访问]

f();//[然后变量a的值被正常访问]

//这里是vg象棋在线。当函数A的变量在函数A返回的函数B中使用时,那么函数B使用vg Chess Online。

示例:

fun() {

Var a='vg象棋在线';

return function () {

alert(a);

}

}

弗吉尼亚

r f = fun();//【现在情况发生变化了,如果a被销毁,显然f被调用的话就不能访问到变量a的值了】 f();//【然后变量a的值正常的被访问到了】

显然,滥用vg棋牌在线会增大内存的使用。所以非特殊情况尽量不要使用vg棋牌在线。如果用到了,记得手动设置空引用,内存才能被回收 f = null ;

图解:(不了解作用域链的同学请先看前面的文章 作用域和作用域链 )

讲解之前,先清醒下头脑,不要越看越迷糊了。如果迷糊了,那就直接忽略下面的。

var name1 = "vg棋牌在线"; var obj = { name1: "李四", fun2: function () { alert(this.name1); }, fun3: function () { return function () { alert(this.name1); } } }

obj.fun3()();//因为这里返回的是一个函数,所以要再加一对()来调用。打印结果是"vg棋牌在线",意料之外。

我们前面讲过“ 哪个对象点出来的方法,this就是哪个对象 ”,那我们的  obj.fun3()() 打印的是“vg棋牌在线”也就是说this执行了全局作用域。

var name1 = "vg棋牌在线"; var obj = { name1: "李四", fun2: function () { alert(this.name1); }, fun3: function () { return function () { alert(this.name1); } } } //obj.fun3()(); var obj2 = {}; obj2.name1 = "test"; obj2.fun = obj.fun3(); obj2.fun();//打印结果"test",再次证明了“哪个对象点出来的方法,this就是哪个对象”. var name1 = "vg棋牌在线"; var obj = { name1: "李四", fun2: function () { alert(this.name1); }, fun3: function () { return function () { alert(this.name1); } } } //obj.fun3()(); var obj2 = {}; obj2.name1 = "test"; obj2.fun = obj.fun3(); obj2.fun();//打印结果"test",再次证明了“哪个对象点出来的方法,this就是哪个对象”.

我们来分解下 obj.fun3()() 先是  obj.fun3() 返回一个匿名函数到了window作用域,然后接着调用this就指向了window了。( 感觉解释有点勉强,也不知道对不,暂时自己先是这么理解的 )

一般,当函数执行完毕后,局部活动对象会被销毁,内存中仅保存全局作用域,但vg棋牌在线的情况是不一样的。

vg棋牌在线的活动对象依然会保存在内存中,于是像上例中,函数调用返回后,变量i是属于活动对象里面的,就是说其栈区还没有释放,但你调用c()的时候i变量保存的作用域链从b()->a()->全局去寻找作用域var i声明所在,然后找到了var i=1;然后在vg棋牌在线内++i;结果,最后输出的值就是2了;

以上所述是小编给大家分享的JavaScript基础篇(6)之函数表达式vg棋牌在线,希望大家喜欢。

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • AG真实平台-php使用Header函数,PHP_AUTH_PW和PHP_AUTH_USER做用户验证

    vg棋牌在线-JavaScript基础篇(6)之函数表达式闭包

  • 澳门天天乐怎么注册-关于VS2012自带的 性能分析 工具使用实例(图文介绍)

    vg棋牌在线-JavaScript基础篇(6)之函数表达式闭包

  • yingya英亚体育平台-JAVASCRIPT函数作用域和提前声明 分享

    vg棋牌在线-JavaScript基础篇(6)之函数表达式闭包

  • 2020辽宁篮球 时间-PHP @ at 记号的作用示例介绍

    vg棋牌在线-JavaScript基础篇(6)之函数表达式闭包

热门资讯