js变量的调用

一、全局变量函数调用

var n = 99;
function f1() {
alert(n);
}
f1();//99

在函数外部定义的变量,再函数中可以被调用,因为变量n,与f1在同一个域下。

二、内部变量函数错误调用

function f1() {
var n = 99;
}
alert(n);//错误

变量n在函数f1中,所以在外部得不到n的值;n与f1不是平级的。

三、不带var的变量默认为全局变量

function f1() {
n = 99;
}
f1();
alert(n);//9

js中默认不带var修饰符的自动成为全局变量,在当前window的任何地方都可以调取到。

四、外部读取局部变量

function f1() {
var n = 99;
function f2() {
alert(n);
}
return f2;
}
var result = f1();
result();//99

内部变量想要在外部使用,这时就用到了闭包。

五、闭包公式例子

function f1() {
var n = 999;
nAdd = function () { n += 1 };

function f2() {
alert(n);
}

return f2;
};

var result = f1();

result();//999

nAdd();

result();//1000

闭包的用途(1、读取函数内部的变量;2、让变量的值始终保持在内存中)

六、变量作用于this应用

var name = 'the window';
var obj = {
name: 'my obj',
getNameFunc: function () {
return function () {
return this.name;
};
}
};

alert(obj.getNameFunc()());//the window

通过闭包,函数内部的函数为全局服务。

var name = 'the window';
var obj = {
name: 'my obj',
getNameFunc: function () {
var that = this;
return function () {
return that.name;
};
}
};

alert(obj.getNameFunc()());//my obj

另一简单应用:

<a onclick="touchThis(this)" href="javascript:touchThis(this)" ></a>

七、var和this不是一回事

var w = 100;
function f1() {
//var w=101;
//this.w=102;
function f2() {
document.write(this.w);
}
return f2;
}
f1()();
//输出:100

var w = 100;
function f1() {
var w = 101;
//this.w=102;
function f2() {
document.write(this.w);
}
return f2;
}
f1()();
//输出:100

var w = 100;
function f1() {
w = 101;
//this.w=102;
function f2() {
document.write(this.w);
}
return f2;
}
f1()();
//输出:101

var w = 100;
function f1() {
//var w=101;
this.w = 102;
function f2() {
document.write(this.w);
}
return f2;
}
f1()();
//输出:102

1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。

2)闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。

Javascript,闭包的更多相关文章

  1. 《Web 前端面试指南》1、JavaScript 闭包深入浅出

    闭包是什么? 闭包是内部函数可以访问外部函数的变量.它可以访问三个作用域:首先可以访问自己的作用域(也就是定义在大括号内的变量),它也能访问外部函数的变量,和它能访问全局变量. 内部函数不仅可以访问外 ...

  2. JavaScript 闭包深入浅出

    闭包是什么? 闭包是内部函数可以访问外部函数的变量.它可以访问三个作用域:首先可以访问自己的作用域(也就是定义在大括号内的变量),它也能访问外部函数的变量,和它能访问全局变量. 内部函数不仅可以访问外 ...

  3. JavaScript闭包(Closure)

    JavaScript闭包(Closure) 本文收集了多本书里对JavaScript闭包(Closure)的解释,或许会对理解闭包有一定帮助. <你不知道的JavsScript> Java ...

  4. Javascript闭包和C#匿名函数对比分析

    C#中引入匿名函数,多少都是受到Javascript的闭包语法和面向函数编程语言的影响.人们发现,在表达式中直接编写函数代码是一种普遍存在的需求,这种语法将比那种必须在某个特定地方定义函数的方式灵活和 ...

  5. javascript闭包理解

    //闭包理解一 function superFun(){ var _super_a='a'; function subfuc(){ console.log(_super_a); } return su ...

  6. Javascript闭包深入解析及实现方法

    1.什么是闭包 闭包,官方对闭包的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.闭包的特点:1. 作为一个函数变量的一个引用,当函数返回时 ...

  7. javascript闭包和作用域链

    最近在学习前端知识,看到javascript闭包这里总是云里雾里.于是翻阅了好多资料记录下来本人对闭包的理解. 首先,什么是闭包?看了各位大牛的定义和描述各式各样,我个人认为最容易一种说法: 外部函数 ...

  8. JavaScript闭包深入解析

    for (var i=1; i<=5; i++) { setTimeout( function timer() { console.log( i ); }, i*1000 ); } --上面这段 ...

  9. JavaScript 闭包系列二(匿名函数及函数的闭包)

    一. 匿名函数 1. 函数的定义,可分为三种 1) 函数声明方式 function double(x) {     return 2*x; } 2)Function构造函数,把参数列表和函数体都作为字 ...

  10. JavaScript闭包模型

      JavaScript闭包模型 -----  [原创翻译]2016-09-01  09:32:22 < 一>  闭包并不神秘 本文利用JavaScript代码来阐述闭包,目的是为了使普通 ...

随机推荐

  1. cgi ISAP sapi等

    1.CGI和FastCGI是apache处理php脚本的其中两种工作模式,还有ISAPI,SAPI等 2.而php-fpm并不是一种工作模式,而是一个PHP在FastCGI模式运行下的进程管理器,全称 ...

  2. c# 无损高质量压缩图片代码

    /// <summary> /// 无损压缩图片 /// </summary> /// <param name="sFile">原图片</ ...

  3. CVirtualGridCtrl控件内的数据如何获取

    CVirtualGridCtrl控件是同花顺自己写的控件和网上的不同,难处理,可以通过 模拟输入ctrl+c,然后从clipboard提取内容.

  4. 【翻译】Selenium IDE v1.0.11 支持转换格式吗?

    原文: http://blog.reallysimplethoughts.com/2011/06/10/does-selenium-ide-v1-0-11-support-changing-forma ...

  5. Jersey Restful部署到Tomcat注意事项

    新的Jersey版本,支持Servlet 3.x,与Servlet 2.x不一样 实现自定义的Application,使用@ApplicationPath("/")标注 @Appl ...

  6. Spark在集群中的安装

    今天由于所以要安装spark做一些实验.我已有的环境是: 操作系统:CentOS6.5 hadoop:hadoop2.4.1 JDK:1.7 集群环境:四个节点   闲话不说,以下是我的安装步骤: 说 ...

  7. HW2.25

    import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...

  8. MVC client validation after PartialView loaded via Ajax MVC3中 弹出 Dialog时候 提交的时候 使用 Jquery 不验证 form表单 的解决办法

    I came across this scenario whereby my main View uses Ajax posts to retrieve PartialViews and delive ...

  9. 第三周作业、实时操作系统µC/OS介绍及其它内容

    作业要求 见<实时控制软件设计>第三周作业 1 阅读笔记--µC/OS 1.1 基本介绍 µC/OS是由Micrium公司研发的实时操作系统,以µC/OS-II或µC/OS-III为内核, ...

  10. Java- Jdbc学习

    java jdbc test jsbc: package cn.honji.sqlserver; import java.sql.Connection; import java.sql.ResultS ...