看一个简单的例子:

html:

<head>
<meta charset="UTF-8">
<title>Document</title>
<script src="test.js"></script>
</head>
<body>
<a href="#" id="test" class="link test test" onclick="fn()">baidu.com</a>
</body>

js:

window.onload = function() {
function fn(){
console.log('fn');
}
};

看起来,当我点击 a 标签的时候,应该有 log ‘fn’,然而实际上却是:

懵了一会儿,因为一般用 window.onload 不会出现这种问题,,,后来想了想明白了,因为 js高程-第三版-中 里是这么说的:

html 事件处理程序中的代码在执行时,有权访问全局作用域中的任何代码。

而上面的 fn 定义在 window.onload 的回调里,处于局部作用域,所以无法访问到,所以把 fn 放到全局作用域就行了,例如:

<head>
<meta charset="UTF-8">
<title>Document</title>
<script>
function fn() {
console.log('fn');
}
</script>
</head> <body>
<a href="#" id="test" class="link test test" onclick="fn()">baidu.com</a>
</body>

这样就 OK,或者把上面这个 script 放到 body 最后也是可以的,总结下就是:

html 事件处理程序中的代码在执行时,有权访问全局作用域中的任何代码。

html 事件处理程序中的代码在执行时,有权访问全局作用域中的任何代码。的更多相关文章

  1. js高级程序设计书中,有一句话在全局作用域中定义的函数实际上只 能被某个对象调用???

    js没有块级作用域(题外话:函数可以作为一个块级),所以我们经常使用闭包来模拟块级作用域,以避免变量或者函数因为名称相同而产生的冲突. 重点来了: 所以,如果我们把哪个变量或者函数放在全局作用域中,那 ...

  2. 全局作用域中,用 const 和 let 声明的变量不在 window 上,那到底在哪里?如何去获取?

    在ES5中,顶层对象的属性和全局变量是等价的,var 命令和 function 命令声明的全局变量,自然也是顶层对象. var a = 12; function f(){}; console.log( ...

  3. $GLOBALS — 引用全局作用域中可用的全部变量

    $GLOBALS 这种全局变量用于在 PHP 脚本中的任意位置访问全局变量(从函数或方法中均可). PHP 在名为 $GLOBALS[index] 的数组中存储了所有全局变量.变量的名字就是数组的键. ...

  4. HTML事件处理程序

    事件处理程序中的代码执行时,有权访问全局作用域中任何代码. //为按钮btn_event添加了两个个事件处理程序,而且该事件会在冒泡阶段触发(最后一个参数是false). var btn_event ...

  5. Javascript高级编程学习笔记(58)—— 事件(2)事件处理程序

    事件处理程序 事件处理程序即响应某个事件的函数 事件处理程序以 “on” 开头 如“onclick”,“onload” HTML事件处理程序 某个元素支持的每种事件都可以使用一个与响应的事件处理程序同 ...

  6. 探究JavaScript中的五种事件处理程序

    探究JavaScript中的五种事件处理程序 我们知道JavaScript与HTML之间的交互是通过事件实现的.事件最早是在IE3和Netscape Navigator 2中出现的,当时是作为分担服务 ...

  7. 学习javascript中的事件——事件处理程序

    事件就是用户或浏览器自身执行的某种动作.诸如 click.load 和 mouseover ,都是事件的名字.而响应某个事件的函数就叫做事件处理程序(或事件侦听器).事件处理程序的名字以“on”开头, ...

  8. javascript中 IE事件处理程序中try catch用法

    本例是学习中笔记 望指正批评! <input id='b1' type='button' value='按钮'/> <script> window.onload=functio ...

  9. js 事件处理程序 事件对象

    事件:用户或浏览器自身执行的动作: 事件处理程序:响应某个事件的函数: 事件流:从页面中接收事件的顺序. 1.DOM事件流 "DOM2级事件"规定的事件流包括三个阶段:事件捕获阶段 ...

随机推荐

  1. Java中RunTime类介绍

    Runtime 类代表着Java程序的运行时环境,每个Java程序都有一个Runtime实例,该类会被自动创建,我们可以通过Runtime.getRuntime() 方法来获取当前程序的Runtime ...

  2. JavaScript 中 this 的用法

    在 JavaScript 中,this 是动态绑定,或称为运行期绑定的.一般而言,在Javascript中,this 指向函数执行时的当前对象. 由于其运行期绑定的特性,JavaScript 中的 t ...

  3. C复杂声明举例

    首先,一些国外的研究成果: 一个用英语解析复杂声明的网站:http://cdecl.org 图表说明复杂声明(英):http://c-faq.com/decl/spiral.anderson.html ...

  4. atitit.GUI图片非规则按钮跟动态图片切换的实现模式总结java .net c# c++ web html js

    atitit.GUI图片非规则按钮跟动态图片切换的实现模式总结java .net c# c++ web html js 1. 图片按钮的效果总结 1 1.1. 按钮图片自动缩放的. 1 1.2. 不要 ...

  5. MongoDB Query 的几个方法

    Query.All("name", "a", "b");//通过多个元素来匹配数组Query.And(Query.EQ("name ...

  6. MySQL是如何做到安全登陆

    首先Mysql的密码权限存储在mysql.user表中.我们不关注鉴权的部分,我们只关心身份认证,识别身份,后面的权限控制是很简单的事情.在mysql.user表中有个authentication_s ...

  7. socket发送http请求

  8. angular初体验

    所有需要ng管理的代码必须被包裹在一个有ng-app指令的元素中ng-app是ng的入口,表示当前元素的所有指令都会被angular管理(对每一个指令进行分析和操作) 利用angular实现双向绑定: ...

  9. java 清除 bom

    参考工具  http://akini.mbnet.fi/java/unicodereader/ Utf8BomRemover 清除bom的方法 package cn.com.do1.component ...

  10. 高德地图API INVALID_USER_SCODE问题以及keystore问题

    今天这篇文章会给大家介绍三个问题: 1,接入API时出现invalid_user_scode问题 首先进行第一个大问题,接入高德地图API时出现invalid_user_scode问题 因为项目需要接 ...