文章有
ctrl+s一键提交的功能时候,真的是会方便很多,对于我们这些高度使用pc,并且熟悉PC快捷键的使用者来说,如何实现html响应ctrl+s快捷键,下面我分享一个简单的代码给大家。
$(window).keydown( function (event) {
if(event.ctrlKey && window.event.keyCode==83 ){
$("#submit").click()
return false
}
}) ;
当使用ctrl+s组合快捷键的时候,我们模拟了submit的点击事件进行提交文章。
、资源面板 source
source区域
source区域2
1区域网站的资源文件,2区域网页文件的代码,3区域信息显示及调试的地方。
2、调试变量的console。
console面板
3、breakpoint断点面板:
breakpoint面板
点击3行右边的breakpoint面板上代码的位置。
观察面板
watch:观察js代码中变量的值,+号添加变量的值
call stack:查看js代码函数调用情况
scope:查看当前变量值
4、调试和跟踪:
继续执行,快捷键 F8.
跳过函数执行下一条,快捷键F10
执行下一条的函数,快捷键F11
执行最近函数
取消或设置断点
是否进行调试或停止
通过按钮,一步一步调试js代码。
刚学习 JS 的时候,总是听过一个名词:命名空间。当时对这个东西并不能够很好的理解,命名为什么还会有空间呢?加上空间能有什么用处?
其实在很多编程语言中,都有命名空间这个概念,它们自身就已经具备了很好的文件和包管理机制,通过 import include require 等等命令,能够引入其他的模块、包或者文件,从而避免文件之间的变量命名重复问题。
然而在 JS 中,脚本文件是通过 script 标签引入的,同时由于 JS 的变量和函数声明的特殊性,一不小心就会造成环境污染,将一个变量或者属性暴露在全局,或者被别的文件中的同名变量所覆盖,于是就有了命名空间这样一个概念。
在 js 中,声明变量时加上关键字和不加关键字是不一样的,var arg = 1 这样的声明,arg 的作用域只在当前页面或者当前的方法中;但是如果声明时不加 var而是直接声明 arg = 1 ,js 就会认为这是一个全局变量,即使它是在一个函数体中声明的。
/* a.js */ var people = 'xiaoming' /* b.js */ var people = { name: 'xiaohong', age: 18 } /* index.html */ <script src="./a.js"></script> <script src="./b.js"></script> console.log(people === 'xiaoming') // false
在上面的代码块中,后引入页面的 b.js 文件的 people 变量就覆盖了 a.js 的 people 变量
上面这种情况,通过命名空间我们就可以很好地解决:
// 如果在 window 上没有 ns 属性,就将 ns 属性挂载到 window 上,作为根空间存在 if (!window.ns) window.ns = {} // 当我们需要声明一个新的变量或者方法时,就可以添加到 ns 中,但是如果在 ns 上随意添加,依然会出现覆盖的情况,所以可以以文件为区分单位来添加 /* a.js */ var a = {} a.people = 'xiaoming' a.getPeopleName = function () { return a.people } ns.a = a /* b.js */ var b = {} b.people = { name: 'xiaohong', age: 18 } ns.b = b // 在页面上引入上面两个文件后,我们可以通过下面的方式来分开使用两个 people console.log(ns.a.people) console.log(ns.b.people) // 通过上面的方法,也可以实现在已经引入的脚本中调用其他脚本的变量和方法 /* c.js */ // 如果 ns.a 存在,则调用它的 getPeopleName 方法 ns.a && ns.a.getPeopleName()
上面的代码块已经简单的说明了命名空间的书写方式,当然你也可以通过其他方式来确定命名空间的各级空间命名方式,比如根节点就可以模仿其他语言的方式,通过倒写的域名来表示 com.google.www
既然命名空间的主要作用是用来防止变量被覆盖、污染全局环境,那么有没有其他方式来实现这一的作用呢?
最简单的,通过立即执行函数就可以比较好的解决这个问题(前提是变量要用 var const let) 声明:
const moduleA = function () { // 私有变量、方法写在函数体中 const a = 1 function func1 () {...} // 需要暴露出来的方法通过返回一个对象写在 return 中 return { b: 2, func2: () => {...} } } () moduleA.a // 报错 moduleA.b // 2
或者通过现在普遍使用的 require.js 等第三方库,ES6 支持的 import 语法来实现模块的引入,也可以防止模块之间的变量覆盖等情况出现。
*请认真填写需求信息,我们会在24小时内与您取得联系。