js 函数定义的两种方式以及事件绑定(扫盲)

一、事件(例如:onclick)绑定的函数定义放在jsp前面和放后面没影响

二、

1 $(function() {
2    function func(){};
3 })

onclick通过如下方式绑定事件到jsp中:onclick = "func();"

由于func()在函数中声明,是局部变量,onclick找不到func(),绑定失败。

三、

function func(){};

onclick = "func();"

这样绑定没有问题,因为func()此时是全局变量,不在任何函数中。

四、

func = function(){

};

onclick = "func();"

这样绑定也没问题,另一种函数定义方式,也不在任何函数中,属于全局变量。

五、

$(function() {
   func = function(){

    };
});

onclick = "func();"

这可以绑定成功,js中,在函数内部,不加var声明的变量是属于全局变量,所以这里func虽然放在函数中,却是全局变量,onclick可以正常触发。

六、

$(function {
   var func = function() {

    };
});

onclick = "func();"

这绑定不成功,可以和情况五比较,func变量前加了var,变成了函数内部的局部变量,所以onclick访问不到func函数,不能触发。

七、全局和局部变量:

1、外部的为全局,内部的为局部变量。

2、加var为局部变量(在方法内),不加var为全局变量(当方法内有一次使用后)

<script type="text/javascript">
var golbe="global";
test();
function test(){
     var local="local";
    document.write(golbe);
    document.write(local);
}
document.write(golbe);
document.write(local);
</script>

在上面的test方法内,当把local变量的var去掉后,local就变成了全局变量,但是在局部不使用local,则这个local作为全局是无效的。

为了验证这点,我把test方法内部唯一使用local变量的这句代码注释掉.发现在外部也打印不出来了。

总结:全局变量可以不声明var 函数内变量必须声明var,在定义全局变量时加或不加var关键字没什么影响;但在定义局部变量时如果不加var关键字javascript解释程序会将其解释为全局变量。

时间: 2024-11-03 03:28:02

js 函数定义的两种方式以及事件绑定(扫盲)的相关文章

Js 类定义的几种方式

提起面向对象我们就能想到类,对象,封装,继承,多态.在<javaScript高级程序设计>(人民邮电出版社,曹力.张欣译.英文名字是:Professional JavaScript for Web Developers)这本书中描述的还算比较详细.我们看看JavaScript中定义类的各种方法. 1.工厂方式 javaScript中创建自己的类和对象,我们应该是必须掌握的,我们都知道javaScript中对象的属性可以在对象创建后动态定义,比如下面的代码: <script type=&q

JS调用webservice的两种方式

协议肯定是使用http协议,因为soap协议本身也是基于http协议.期中第二种方式:只有webservice3.5以后版本才可以成功 第一种方式:构造soap格式的body,注意加粗的黄色标识,比如: createXMLHttpRequest();     var data;     data = '<?xml version="1.0" encoding="utf-8"?>';     data = data + '<soap:Envelope

值传递和引用传递-----函数参数传递的两种方式

回顾: 在定义函数时函数括号中的变量名成为形式参数,简称形参或虚拟参数:在主调函数中调用一个函数时,该函数括号中的参数名称为实际参数,简称实参,实参可以是常量.变量或表达式. 注意: 1.C语言中实参和形参之间的额数据传递是单向的“值传递”,单向传递,只能由实参传给形参,反之不能. 2.被调用函数的形参只有函数被调用时才会临时分配存储单元,一旦调用结束占用的内存便会被释放. 3.”按值传递“中包括值传递(实实在在的值啊!)和指针传递(指针传递参数本质上是值传递的方式,它所传递的是一个地址值),传

js数组清空的两种方式

编辑器加载中...方式1,length赋值为0 这种方式很有意思, 其它语言如Java,其数组的length是只读的,不能被赋值.如 int[] ary = {1,2,3,4}; ary.length = 0; Java中会报错,编译通不过. 而JS中则可以,且将数组清空了, var ary = [1,2,3,4]; ary.length = 0; console.log(ary); // 输出 [],空数组,即被清空了 目前 Prototype中数组的 clear 和mootools库中数组的

JavaScript加强_01——函数定义的三种方式

// 1.(不多用) function myfun(a , b){ return a + b; } // 2.用function定义匿名函数(常用) var myfun = function(a , b){ return a + b; }; alert(myfun instanceof Function); // 输出true,一个变量引用的是函数对象,它就是Function的实例 // 3.调用Function的构造器创建函数:new Function(p1,p2,...,pn),前n-1个数

DataTables.js插入数据的两种方式

一:采用数组的方式插入值 var tableData = []; var i = 0; var idxTable = 1; $.each(data, function (i, d) { tableData.push([idxTable, d.stcd, d.stnm, d.ddz, d.ddcp, d.ckflz,d.normz,d.ttcp,d.actcp,d.z,d.w,d.inq,d.oz,d.outq,d.adjw,"","","查看"]

函数定义的三种方式

1.关键字函数 function fnName(){} 2.字面量函数 var fn = function(){} 字面量可以暂时理解为右值,即等号右面的值 3.构造函数 var fn = new Function() 原文地址:https://www.cnblogs.com/jsjx-xtfh/p/9452380.html

java调用matlab函数接口的两种方案

Java 调用matlab 函数接口 Java调用matlab函数接口有两种方式: l 一种是通过matlab把函数打成jar包: l 一种是把matlab编译成dll后,用C++再封装成java能支持的数据类型的dll. 注意:不论用这两种方式中的哪一种,最终部署时都需要matlab环境(MCR,在matlab安装路径下有). 1. 方式一:matlab直接打jar包 1.1. 利用matlab自带工具打jar包 1.1.1. 建立jar包 在matlab的Commond Window中输入d

Spring Boot 中实现定时任务的两种方式

在 Spring + SpringMVC 环境中,一般来说,要实现定时任务,我们有两中方案,一种是使用 Spring 自带的定时任务处理器 @Scheduled 注解,另一种就是使用第三方框架 Quartz ,Spring Boot 源自 Spring+SpringMVC ,因此天然具备这两个 Spring 中的定时任务实现策略,当然也支持 Quartz,本文我们就来看下 Spring Boot 中两种定时任务的实现方式. @Scheduled 使用 @Scheduled 非常容易,直接创建一个