var tensquared=(function(x) {return x*x;}(10)); //这是一个函数表达式 问:为什么花括号后面还有一个(10)的?而且整个句子用()扩起来?这个是什么表
来源:互联网 发布:更改音乐的软件 编辑:程序博客网 时间:2024/05/21 06:17
var tensquared=(function(x) {return x*x;}(10)); //这是一个函数表达式问:为什么花括号后面还有一个(10)的?而且整个句子用()扩起来?这个是什么表示法?
首先我们来拆解这一行语句;一、 var tensquared = xx; 这是赋值语句;二、function (x){ return x*x; } 这是一个匿名函数;所谓的匿名函数是指它没有自己的名字,既不是这样:function name(){};拥有一个函数名,也不像这样:var name = function(){};将函数赋给一个变量地址用于日后的调用;为什么会有这样的函数呢,因为我们有时候有用到一些情况,我个只是临时地一次性地使用一个函数,用过了这个函数也就再没用了,那么这个时候就用到了匿名函数(当然,并不一定说只有一次性的才会用到匿名函数,还有其它的情况,不一一举例了。)三、函数() 这样的语句我们都知道是让一个函数运行,而括号中的值表示传值,比如:function name(arg){ alert(arg); };name('yes');那么,程序执行到name();这个语句的时候,会将'yes'这个字符串传递到函数name中去,并执行name函数;四、那么,这个函数我们再来理解一下:function(x){return x*x;}是一个函数,然后我们直接在它后面加上个括号,是不是表示直接运行这个匿名函数呢:function(x) {return x*x;}(10)这一步与下面的方法是一样的:function name(x){return x*x;}name(10);那么再加上赋值:var tensquared = function(x) {return x*x;}(10);是不是与下面这一系列的代码起到的效果一样呢:function name(x){return x*x}var tensquared = name(x);是不过两行的这种实现方式之后,那个函数我们以后还可以通过name(值);这样的方式再一次或者多次地去调用它,因为它有名,我们能用这个方法调用到它;而var tensquared=function(x) {return x*x;}(10)这样的方式,是当时就执行了,然后将执行的结果赋值给了它前面的变量tensquared,我们以后想再调用那个return x*x所在的函数,却没办法了,因为它没名字,运行后就找不到了;五、最后说说外面的括号,这个括号其实是可有可无的,而且这个括号的用法与人们常用的另一种用法有所偏差,因为括号括在最外围,已经失去了它的意义,其实应该是这样的:var tensquared=(function(x) {return x*x;})(10);只将匿名函数本体给括了起来,因为我们有时候这个function很长,而且说不定有多少行,那么加一个括号告诉程序,这是一个完整的整体,其实这一步就算这样用,也是可有可无的。六、再说说这种用法的意义:像这种用法,大多数时候就是用来获取到一个值,而这个值却是需要一系列的计算后才能得到的,而这个计算的过程,我们只需用到一次,不需要再用第二次了,这时候,这种语句结构就有用了:例如我们获取用户在使用的是什么品牌的浏览器:var browser = function(){ if(是IE浏览器) return 'IE'; else if(是chrome浏览器) return 'CH'; else if(是Firefox浏览器) return 'FF';}();后面我们再想知道用户的浏览器品牌,只要调用变量browser这个变量,看看它里面的字符串是什么,就知道了。是不是很有意思和很有实用价值的一种语句结构呢?
0 0
- var tensquared=(function(x) {return x*x;}(10)); //这是一个函数表达式 问:为什么花括号后面还有一个(10)的?而且整个句子用()扩起来?这个是什么表
- 为什么在函数的声明后面还有一个 const?
- 为什么在函数的声明后面还有一个 const?
- 习题 4.6 有一个函数:y=x (x<1) y=2x-1 (1<=x<10) y=3x-11 (x>=10) 写程序,输入x的值,输出y相应的值。
- 【c语言】有一个函数: x < 1 --- y = x 1 <= x < 10 --- y = 2 * x - 1 x >= 10 --- y = 3 * x - 11 输
- js css版本控制在链接后面加一个v=x.x.x,让浏览器缓存新的文件
- 判断一个数(x)是否是2的n次方 x&(x-1)) == 0
- acm-求sinh(x)的值,sinh(x) = (ex-e-x)/2 ,其中用一个函数求e^x 。
- (x) ((x)-1)能否成为一个合法的c表达式
- 用一个表达式而不是一个循环语句 判断一个数X是否是2的N次方(2,4,8,16......)
- 【cocos2d-x 3.x】01-从main函数探讨cocos2d-x 3.x是如何运行起来的
- MATLAB 函数句柄Function handle的用法(Af = @(x) A*x;)
- AngularJS(1.X)的一个表达式
- 用一个表达式,判断一个数X是否是2的n次方(2,4,8,16...),不可以用循环语句。
- double x = 10 ,y = 0;y = x % 2; 这个表达式正确吗?
- 使用 For 循环的自动索引功能创建数组y1=sin(x/10)和y2=cos(x/10),(x=0-99),并分别用一个波形图和一个波形图表来进行显示。
- 写一个函数,判断一个int型的正整数是否是2的幂,即是否可以表示成2^X的形式(不可以用循环)
- 写一个函数,判断一个int型的正整数是否是2的幂,即是否可以表示成2^X的形式(不可以用循环)
- Java 用户登录系统
- 腾讯信鸽自定义推送通知
- 《OpenCV2计算机视觉编程手册》2-8定义感兴趣区域(打水印)
- _snprintf_s()函数的正确用法
- C - Sacrament of the sum
- var tensquared=(function(x) {return x*x;}(10)); //这是一个函数表达式 问:为什么花括号后面还有一个(10)的?而且整个句子用()扩起来?这个是什么表
- Hdu oj 2553 Elevator(坑题)
- OTG
- nyoj 116 士兵杀敌(二)<经典树状数组-插点问线>
- 空心三角形
- eclipse4.5在线安装Aptana3插件报错解决方案
- Vmware vSphere client手动更改mac地址
- SDUT2132数据结构实验之栈二:一般算术表达式转换成后缀式(栈)
- Java 打印水仙花数