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),这时一定要小心,不要随便改变父函数内部变量的值。

最新文章

  1. vuex(1.0版本写法)
  2. 培训SQLServer 嵌套事务PPT分享
  3. Spring(2)
  4. 条件变量pthread_cond_t怎么用
  5. BZOJ3159: 决战
  6. oracle client ORA-12541: TNS: 无监听程序
  7. UnityShader之Shader格式篇【Shader资料1】
  8. SQL_Server_2005_函数大全(描述及实例)
  9. java获取获得Timestamp类型的当前系统时间
  10. gnu c语言中的?:的作用
  11. (原创)monitor Dell Powerconnec 6224 with cacti
  12. 自己意淫的一个简陋的Python网站扫描器
  13. (step6.1.4)hdu 1102(Constructing Roads——最小生成树)
  14. Mysql之IN 和 Exists 用法
  15. 关于ToolStrip设置Location无效的问题
  16. Python 学习笔记10
  17. 处理SQL Server中的重复行
  18. unity Tab键实现切换输入框功能
  19. 图解HTTP第四章
  20. [Swift]在Swift项目中创建桥接头文件,Swift文件和Objective-C文件相互调用

热门文章

  1. java 页面url传值中文乱码的解决方法
  2. 理解SVG坐标系统和变换: 建立新视窗
  3. fcitx中文输入法
  4. 【HTML】Beginner7:Image
  5. Azure 虚拟机常见问题-上
  6. 最新Blog
  7. 人工神经网络(Artificial Neural Networks)
  8. win7 下恢复“经典任务栏”/“快速启动栏”,关闭“窗口自动最大化” -摘自网络
  9. lab 1实验报告
  10. 【三支火把】---C指针总结