undefined-js的第二次弹窗为什么存在呢?

问题描述

js的第二次弹窗为什么存在呢?
function b(){
var a=1;
function c(){
alert(a);
}
return c;
}
alert(b()());
我的理解是只弹一次,为什么会有第二次undefined呢?

解决方案

alert(b()());可以分成几部分,根据优先级,alert内先解析括号内的,也就是b()()代码,碰到b(),因为b是函数,后面跟()就执行了function b,该方法返回
return c,返回了function c。于是返回的结果和后面的()结合,执行c函数。alert(a)弹出1,但没有返回值,所以对于最外层alert来说就是undefined了。
这就是典型的闭包。
改成下面这样就不出现undefined了。

function b(){ var a=1;function c(){ alert(a);return 'b';}return c;}alert(b()());

解决方案二:
因为在调用b()的时候,又弹框一次,本身,b()就是弹框出现的,在b()中再一次,就会出现两次了,建议修改一下代码

解决方案三:
浏览器直接执行alert(b()()),无法解析b()(),但可以解析b(),所以调用了b(),b()中调用c(),弹一次“1”,这时仍然无法解析,所以弹“undefined”

时间: 2024-10-20 12:00:18

undefined-js的第二次弹窗为什么存在呢?的相关文章

json-求助 js中第二次attr不改变id的值

问题描述 求助 js中第二次attr不改变id的值 第一次 var _id ="1" $("#id").attr("id",id) 第二次 var _id ="2" $("#id").attr("id",id) 确认 页面的button的id始终是1,求助 解决方案 PS:你第一次的时候:var _id ="1";$("#id").attr(&qu

JS如何实现一次性弹窗,使刷新后不弹出的方法教学

本文实例讲述了JS实现一次性弹窗的方法.分享给大家供大家参考,具体如下: <!DOCTYPE html PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type"content="text/h

js实现弹窗插件功能实例代码分享

 这篇文章主要介绍了 目前测试下:支持IE6+ 火狐 谷歌游览器等.   先来看看此组件的基本配置项:如下:   代码如下: this.config = {    targetCls   :   '.clickElem',   // 点击元素  title:  '我是龙恩',      // 窗口标题  content     :  'text:<p style="width:100px;height:100px">我是龙</p>',  //content  

js实现弹窗插件功能实例代码分享_javascript技巧

目前测试下:支持IE6+ 火狐 谷歌游览器等. 先来看看此组件的基本配置项:如下: 复制代码 代码如下: this.config = {  targetCls   :   '.clickElem',   // 点击元素 title:  '我是龙恩',      // 窗口标题 content     :  'text:<p style="width:100px;height:100px">我是龙</p>', //content            :  'im

js判断undefined类型,undefined,null的区别详细解析

 本篇文章主要是对js判断undefined类型,undefined,null,NaN的区别进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助 js判断undefined类型   今天使用showModalDialog打开页面,返回值时.当打开的页面点击关闭按钮或直接点浏览器上的关闭则返回值是undefined 所以自作聪明判断      var reValue=window.showModalDialog("","",""); 

js判断undefined类型,undefined,null, 的区别详细解析_javascript技巧

js判断undefined类型 今天使用showModalDialog打开页面,返回值时.当打开的页面点击关闭按钮或直接点浏览器上的关闭则返回值是undefined所以自作聪明判断   var reValue=window.showModalDialog("","","");   if (reValue== undefined){  alert("undefined"); } 发现判断不出来,最后查了下资料要用typeof 方

JS 中如何判断 undefined 和 null

JS 中如何判断 undefined JavaScript 中有两个特殊数据类型:undefined 和 null,下节介绍了 null 的判断,下面谈谈 undefined 的判断. 以下是不正确的用法: var exp = undefined;if (exp == undefined){    alert("undefined");} exp 为 null 时,也会得到与 undefined 相同的结果,虽然 null 和 undefined 不一样.注意:要同时判断 undefi

深入理解js闭包

深入理解js闭包 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量. Js代码 var n=999; function f1(){ alert(n); } f1(); // 999 另一方面,在函数外部自然无法读取函数内的局部变量. Js代码

通过 Node.js, Express.js 实现 HTTP/2 Server Push

什么是 HTTP/2 Server Push HTTP/2 是 Web 开发的新标准,拥有很多不错的优点能够让 Web 访问更快且开发的工作更轻松简单.比如,引入多路复用传输不用合并资源,服务器推送(Server Push)资源让浏览器预加载. 该文不会讲述 HTTP/2 的所有优势.你可以通过上篇文章了解更多{% post_link http2-node-express %}.该文主要关注于在 Node.js环境使用 Express.js 和 HTTP/2 库 spdy. 服务器推送(Serv