其实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棋牌在线,希望大家喜欢。