JavaScript基础—闭包,事件

Js基础-闭包,事件

1:js中的闭包

概念:在一个函数内部又定义了一个函数,内部函数能访问到外部函数作用域范围内的变量,这时这个内部函数就叫做闭包,无论这个内部函数在哪里被调用都能访问到外部函数作用域中的那些变量。这些闭包是通过作用域链来实现的。

闭包可以做什么:

改变变量作用域;js中的面向对象都是用闭包来模拟的。

注意:当代码中有闭包的时候,闭包的代码什么时间执行最重要。

Eg:下面的代码相当于C#中的局部变量,外面是访问不到的。

  1. <script type="text/javascript">
  2. ????function Person(name) {
  3. ????????this.user_name = name;
  4. ????????var user_age = ‘23‘;
  5. ????}
  6. ????var p1 = new Person(‘阿辉‘);
  7. ????alert(p1.user_age);
  8. </script>

通过下面的demo可以实现外部的访问。

  1. <script type="text/javascript">
  2. ????function Person(name) {
  3. ????????this.user_name = name;
  4. ????????//通过这种方式可以模拟私有成员,类似于private成员。
  5. ????????var user_age = 23;
  6. ????????//this这里就类似于public成员
  7. ????????this.set_age = function(age) {
  8. ????????????user_age = age;
  9. ????????};
  10. ????????this.get_age = function() {
  11. ????????????return user_age;
  12. ????????};
  13. ????}
  14. ????var p1 = new Person(‘阿辉‘);
  15. ????p1.set_age(100);
  16. ????alert(p1.get_age());
  17. </script>

Eg:实际中的闭包

这里相当于我们C#中的静态变量一样,下面的变量输出就是先在自己的作用域中找,接着在父类的作用域中招,接着在整个大的环境中找。最里面的作用域函数就是闭包。这是通过作用域链来实现的。优点:外层函数的变量都可以访问到。缺点:最里面的函数要是不释放,外层一直保存着,不释放。

  1. var x = 100;
  2. ?
  3. function fn1() {
  4. ????var y = 101;
  5. ????alert(y);
  6. ????alert(x);
  7. ????return function() {
  8. ????????var y = 99;
  9. ????????alert(y);
  10. ????????alert(x);
  11. ????};
  12. }
  13. var fn2 = fn1();
  14. fn2();

2:js中的this

这里的this大体上面和c#中的一样,只是我们是在js中药因地制宜。

下面的代码就是代表window.

  1. <script type="text/javascript">
  2. ????/*在一个函数内部,this表示是那个对象,取决于当前函数是那个对象的函数*/
  3. ????function f1() {
  4. ????????alert(this);//这个this代表window对象
  5. ????}
  6. ????//直接在页面上面定义函数默认是注册给了window对象的,下面的f1(0和window.f1()等价
  7. ????f1();
  8. </script>

?

Js中的this代表谁,我们只需要看这个函数注册给了谁,要是没有注册是匿名函数,则是window中的this。

3:js中的事件

事件是最最重要的,因为在页面上就是这么写的。

以前在开发中经常会遇到页面的跳转,有时候又不跳转,我们在href="#"喜欢写#,这样做的坏处是页面会重新的回到顶部,我们可以使用js中的代码来写。

  1. <a href="javascript:alert(void());">11</a>

这样子就不会重新的刷新页面了。这里在html中写的javascript:这是协议,是我们和浏览器之间约定好的规则。

事件就是为其添加Onclick事件。

  1. <div>
  2. ????<input onclick="alert(new Date().toLocaleString());" type="button" name="name" value="显示当前时间"/>
  3. </div>

?

?

时间: 2024-12-11 07:41:36

JavaScript基础—闭包,事件的相关文章

JavaScript基础–闭包

JavaScript基础–闭包 理解闭包的概念对于学习JavaScript至关重要,很多新手(包括我)开始学习闭包时,都会感觉似懂非懂,之前看了一些资料,整理了闭包的一篇博客,若有疏忽与错误,希望大家多多给意见. 概述 理解闭包的概念前,建议大家先回想一下JS作用域的相关知识,如果有疑问的同学,可以参考:JavaScript基础–作用域.闭包的定义如下: Closure is when a function is able to remember and access its lexical s

javascript基础-闭包

原理 函数里包含函数,即闭包. 包含函数的结果是,子函数会挟持父函数的活动对象.子函数在访问一个变量时,先读自身的活动对象,是否包含此变量,没有从父函数里找,还没有,去祖函数,层层回溯,直到window,还没有就返回undefined.如图: 优点 对象.模块化的基础. 缺点 增加额外的内存开销: 子函数销毁前都会挟持父函数的活动对象. IE8-(IE8和IE8以前)容易导致内存泄露: IE8-的DOM是由COM写的,标准浏览器(chrome,firefox,safari,opera)的内存回收

javascript 基础之事件(event)-------1

  如果在js中想触发另一个元素的onchang,onclick 等方法可以使用obj.fireEvent("onchange");   来实现: html: <input type="checkbox" id="mycheckox2" onclick="firemycheckoxonclick()"> javascript .csharpcode, .csharpcode pre { font-size: sma

JavaScript基础—dom,事件

Js基础-DOM 1:dom:文档对象模型 Dom就是html页面的模型,将每个标签都作为一个对象,js通过调用dom中的属性,方法就可以对网页中的文本框,层等元素进行编程控制.Dom就是一些让javascript能操作html页面控件的类,函数. 这就是文档对象模型.按照xml文档的理解就可以. à页面中的属性,标签要是没有注明给那个对象,则统一时给window的,我们都可以通过window点击出来,进行操作,这个js中理解的一样.但是我们现在通过document.getElementById

javascript基础——鼠标事件,系统对话框等

1.鼠标事件 (1).onclick:用户点击鼠标左键,以及当焦点在一个按钮上时,用户按Enter键时,发生onclick事件 (2).ondblclick:用户双击鼠标左键时,发生ondblclick事件 (3).onmousedown:用户按下任意鼠标按钮的时候,发生onmousedown事件 (4).onmouseout:当光标在一个元素上,并且用户将其移出元素边界时,发生onmouseout事件 (5).onmouseover:当光标在一个元素之外,并且用户将移动到该元素上时,发生onm

javascript基础:事件

事件: 概念:某些组件被执行了某些操作后,触发某些代码的执行 *  事件:某些操作,如:单击,双击,键盘按下了,鼠标移动了 *  事件源:组件.如:按钮   文本输入框.... *  监听器:代码 *  注册监听:将事件,事件源,监听器结合在一起.当事件源发生了某个事件,则触发执行某个监听器代码 常见的事件: 1.点击事件: 1.onclick(单击事件) 当用户点击某个对象时调用的事件句柄 2.ondblclick(双击事件) 2.焦点事件 1.onblur:失去焦点 一般用于表单校验 2.o

javascript基础-提交事件

制作百度用户注册页面实现输入内容的验证 制作QQ号码申请页面,实现页面内容输入的验证 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <

JavaScript基础——函数表达式、闭包

简介 函数表达式是JavaScript中的一个既强大又容易令人困惑的特性.定义函数的方式有两种:一种是函数声明,另一种就是函数表达式.函数声明的语法是这样的: function functionName(arg0 , arg1 , arg2--){ //函数体 } 首先是function关键字,然后是函数的名字,这就是指定函数名的方式.Firefox.Safari.Chrome和Opera都给函数定义了一个非标准的name属性,通过这个属性可以访问到给函数指定的名字.这个属性的值永远等于跟在fu

【javascript基础】8、闭包

原文:[javascript基础]8.闭包 前言 函数和作用域啥的我们前面已经了解了,现在就要学习闭包了,这是一个挺晦涩的知识点,初学者可能会感觉不好理解,但是高手都不不以为然了,高手就给我提点意见吧,我和新手一起来学习什么是闭包. 例子 先不说定义,先看一个题,看看大家能得出正确的结果不, function test(){ var arr = []; for(var i = 0;i<10;i++){ arr[i] = function(){ return i; } } return arr;