javascript中的return和闭包函数浅析_javascript技巧

高手绕道!这跟闭包本身没什么大的关系,也不知道怎么取标题,随便凑了个数,望见谅!

今天一个刚学js的朋友给了我一段代码问为什么方法不执行,代码如下:

复制代码 代码如下:

function makefunc(x) {
 return function (){
  return x;
 }
}
alert(makefunc(0));

其实不是不执行,只是朋友的意思这里alert出来的应该是“0”,而不是function (){return x;}。
不是脚本写错了,只是没搞懂return,从当前函数退出,并从那个函数返回一个值。如果返回的是一个函数,那么返回的也是函数本身。
可以这样修改上面的代码,就是alert(makefunc(0)()):

复制代码 代码如下:

function makefunc(x) {
 return (function (){
  return x;
 })();
}
alert(makefunc(0)());

如果要返回函数执行的结果那么首先要让这个函数执行,例如:

复制代码 代码如下:

function makefunc(x) {
 return (function (){
  return x;
 })();
}
alert(makefunc(0));

这里有一个匿名函数,

复制代码 代码如下:

(function (){
 return x;
})();

在第一个括号内是匿名函数,第二个括号用于调用该匿名函数,您可以在第二个括号中传入所需的参数。例如:

复制代码 代码如下:

(function( x , y){
 alert( x + y);
})(2 ,3 );

时间: 2024-09-08 17:12:54

javascript中的return和闭包函数浅析_javascript技巧的相关文章

javascript中的作用域和闭包详解_javascript技巧

一.JavaScript作用域 JavaScript变量实际上只有两种作用域,全局变量和函数的内部变量.在函数内部任何一个地方定义的变量(var scope)其作用域都是整个函数体. 全局变量:指的是window对象下的对象属性. 作用域划分:基于上下文,以函数进行划分的,而不是由块划分的. 强调两点: 1. 在同一作用域中,JavaScript是允许变量的重复定义,并且后一个定义将覆盖前一个定义. 2. 函数内部如果不加关键字var而定义的变量,默认为全局变量. var scope="glob

JavaScript中提前声明变量或函数例子_javascript技巧

如题所示,看下面的示例. (可以使用Chrome浏览器,然后F12/或者右键,审查元素.调出开发者工具,进入控制台console输入) (使用技巧: 控制台输入时Shift+Enter可以中途代码换行) 复制代码 代码如下: var name = "xiaoming"; (function(){   var name = name || "小张";   console.info(name); })();// 小张 (function(){   name = name

JavaScript中获取高度和宽度函数总结_javascript技巧

html代码: 复制代码 代码如下:  <body>      <div class="father" id="father">          <h3>这是父元素,屏幕分辨率是1366*768</h3>          <div class="son" id="son">              <h3>这是子元素,祝大家国庆快乐 </h3&

Javascript变量函数浅析_javascript技巧

一.变量 在javascript变量中可以存放两种类型的值:原始值和引用值. 原始值存储在栈上的简单字段,也就是值直接存储在变量所标示的位置内. 引用值存储在堆内的对象,栈内变量保存的是指向堆内对象的指针值. 在javascript中有5种基本类型:Undefined,Null,Boolean,Number,String. 引用类型其实就是对象,类似其他语言中类实例的概念. 复制代码 代码如下: var b = true; // 存储在栈上 var num = 20; //存储在栈上 var b

浅析Javascript中bind()方法的使用与实现_javascript技巧

我们先来看一道题目 var write = document.write; write("hello"); //1.以上代码有什么问题 //2.正确操作是怎样的 不能正确执行,因为write函数丢掉了上下文,此时this的指向global或window对象,导致执行时提示非法调用异常,所以我们需要改变this的指向 正确的方案就是使用 bind/call/apply来改变this指向 bind方法 var write = document.write; write.bind(docum

浅析JavaScript中的CSS属性及命名规范_javascript技巧

许多CSS样式属性的名字中都有连字符,在JavaScript中,连字符被解释为减号. 因此,CSS2Properties对象的属性名和真正的CSS属性名有点不同. 如果一个CSS属性名含有一个或多个连字符,在JS中则需要删除了连字符,并且原来紧接在连字符后的字母改为大写. 要注意的是float是JS的关键字,所以在JS中float被写作cssFloat与或floatStyle. 下面是CSS自身属性与JavaScript中CSS编码对照表: 盒子标签和属性对照:CodeCSS语法 (不区分大小写

JavaScript中定义类的方式详解_javascript技巧

本文实例讲述了JavaScript中定义类的方式.分享给大家供大家参考,具体如下: Javascript本身并不支持面向对象,它没有访问控制符,它没有定义类的关键字class,它没有支持继承的extend或冒号,它也没有用来支持虚函数的virtual,不过,Javascript是一门灵活的语言,下面我们就看看没有关键字class的Javascript如何实现类定义,并创建对象. 一.定义类并创建类的实例对象 在Javascript中,我们用function来定义类,如下: function Sh

关于JavaScript中var声明变量作用域的推断_javascript技巧

一.迷思!由一段代码引发的疑惑 请看如下代码: 复制代码 代码如下: for(var i=0;i<3;i++) { console.log(j+","+k); for(var j=0;j<3;j++) { var k = j+1; } } console.log(i); 输出结果: undefined,undefined 3,3 3,3 3 如果你是搞c.java等语言的,可能你会不解,为何j.k这种局部变量可以被作用域外的代码访问呢? 如果JavaScript中用var声

在JavaScript中正确引用bind方法的应用_javascript技巧

 在JavaScript中,方法往往涉及到上下文,也就是this,因此往往不能直接引用,就拿最常见的console.log("info-")来说,避免书写冗长的console,直接用log("info-")代替,不假思索的会想到如下语法: var log = console.log; log("info-");      很遗憾,运行报错:TypeError: Illegal invocation.      为啥呢?对于console.log(