js

前端学习(33)~js学习(十):函数

让人想犯罪 __ 提交于 2020-03-04 22:54:40
关于函数的核心内容: 函数有哪几种定义和调用方式 this:函数内部的 this 指向、如何改变 this 的指向。 函数的严格模式 高阶函数:函数作为参数传递、函数作为返回值传递 闭包:闭包的作用 递归:递归的两个条件 深拷贝和浅拷贝的区别 函数的介绍 函数: 就是将一些功能或语句进行封装,在需要的时候,通过调用的形式,执行这些语句。 函数也是一个对象 使用 typeof 检查一个函数对象时,会返回function 函数的作用: 将大量重复的语句抽取出来,写在函数里,以后需要这些语句的时候,可以直接调用函数,避免重复劳动。 简化编程,让编程模块化。高内聚、低耦合。 来看个例子: console.log("你好"); sayHello(); // 调用函数 // 定义函数 function sayHello(){ console.log("欢迎"); console.log("welcome"); } 函数的定义/声明 方式一:利用函数关键字自定义函数(命名函数) 使用 函数声明 来创建一个函数(也就是 function 关键字) 。语法: function 函数名([形参1,形参2...形参N]){ // 备注:语法中的中括号,表示“可选” 语句... } 举例: function fun1(a, b){ return a+b; } 解释如下: function:是一个关键字

js-实现点击按钮直接打印

懵懂的女人 提交于 2020-03-04 21:52:39
很多网站都有此功能 ,点击按钮 直接打印;最近做项目有个这样的需求, 所以就研究了一下,具体代码如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <title>指定被打印的内容</title> <script language="javascript"> function print_fn(printname) { var newshtml = printname.innerHTML; var oldshtml = document.body.innerHTML; document.body.innerHTML =newshtml; window.print(); document.body.innerHTML=oldshtml; return false; } window.onload=function() { var button=document.getElementById("button"); var print=document.getElementById("print"); button.onclick=function() { print_fn(print); } } </script> </head> <body> <div id="print"> <h1>这是要被打印的内容</h1> <

基于JS的21点纸牌游戏系统

筅森魡賤 提交于 2020-03-04 21:18:54
适合正在学习JS的小白浏览 利用JS编写一个简单的21点纸牌游戏系统 设计一款以 21 点玩法为主的纸牌类游戏,该程序是一个 21 点的扑克牌游戏,玩家一共可以要 5 张牌,如果牌的点数超过 21 ,则暴了,自动出局;在不超过 21 点的情况下,玩家与庄家(计算机)比较牌点数的大小,大者为赢。 一、功能要求 ( 1 )程序中一共有 52 张扑克牌可以随机抽取,大于 10 的点数全部为半点; ( 2 )高级玩家可以查看下一张牌, 点击隐藏位置多次看牌,并决定是否要牌。当然,在游戏规则上不能泄露这个秘密; ( 3 )可以编写作弊程序, 点击某个特殊位置多次,去查看计算机的牌面,并根据计算机所得的牌来输入自己想要的牌,当然,在界面上不能显示这点秘密 ( 4 )每次要牌后可以设定下注值,即如果开始下的是 10 金币的注,如果牌好,你可以要求再下注,当然不能超过你所有的总钱数 二、简单操作 1.动态生成卡组的函数 1 // 生成卡组 2 function createCardArray(){ 3 var type = ["方块","梅花","红桃","黑桃"]; 4 var MAXNUM = 13; 5 var cardArray = new Array(); 6 for(i=0;i<type.length;++i) { 7 for(num=1;num<=MAXNUM;++num) { 8

JS/JQuery获取当前元素的上一个/下一个兄弟级元素等元素的方法

喜欢而已 提交于 2020-03-04 20:43:15
$(function(){ //遍历获取的input元素对象数组,绑定click事件 var len = $("input[type='file']").length; for(var i = 0; i < len; i++){ $("input[type='file']").eq(i).click(function(){ $(this).next().val(""); $(this).next().hide(); $(this).css("width","200px"); }) } } jQuery获取: jQuery.parent(expr),找父亲节点,可以传入expr进行过滤,比如$("span").parent()或者$("span").parent(".class") jQuery.parents(expr),类似于jQuery.parents(expr),但是是查找所有祖先元素,不限于父元素 jQuery.children(expr),返回所有子节点,这个方法只会返回直接的孩子节点,不会返回所有的子孙节点 jQuery.contents(),返回下面的所有内容,包括节点和文本。这个方法和children()的区别就在于,包括空白文本,也会被作为一个jQuery对象返回,children()则只会返回节点 jQuery.prev(),返回上一个兄弟节点

js作用域和作用域链

回眸只為那壹抹淺笑 提交于 2020-03-04 19:25:26
作用域:在 js预编译 时、代码执行之前对全局或局部的变量进行收集,存放在一指定内存中scope,执行时对scope进行访问,scope 就是全局或局部的作用域。 如: 1 function test() { 2 var a = 123; 3 } 4 5 test(); 在test() 执行之前对test 进行预编译 生成test 的 scope(AO Activetion Object)。收集test 函数中的变量存放在scope中。 此时test 的scope 为: {   a:undefined } 在test 函数执行时 对 scope 中的 a 变量进行赋值,a = 123; 实际上在全局环境进行预编译时也会产生一个作用域,在test 被定义时会在test 函数上定义一个作用域数组([[Scopes]])。并将全局作用域放入test的作用域数组中。 如: 1 var a = 456; 2 3 function test() { 4 var b = 123; 5 console.log(b); 6 console.log(a); 7 } 8 9 test(); 在全局环境进行预编译时,会生成全局作用域Global Global {   a: undefined,   test: undefined } 此时test 函数的作用域数组中就已经包含了Global test.[

Js原生 双向数据绑定

情到浓时终转凉″ 提交于 2020-03-04 18:23:37
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Demo</title> <script> function DataBinder( object_id ) { // Create a simple PubSub object var pubSub = { callbacks: {}, on: function( msg, callback ) { this.callbacks[ msg ] = this.callbacks[ msg ] || []; this.callbacks[ msg ].push( callback ); }, publish: function( msg ) { this.callbacks[ msg ] = this.callbacks[ msg ] || []; for ( var i = 0, len = this.callbacks[ msg ].length; i < len; i++ ) { this.callbacks[ msg ][ i ].apply( this, arguments ); } } }, data_attr = "data-bind-" + object_id, message = object_id + ":input",

js 的try catch应用

♀尐吖头ヾ 提交于 2020-03-04 17:17:33
try { throw new Error(10,"asdasdasd") } catch (e) { alert(e.message); alert(e.description) alert(e.number) alert(e.name) throw new Error(10,"asdasdasd") } 在JavaScript可以使用try...catch来进行异常处理。例如: try { foo.bar(); } catch (e) { alert(e.name + ": " + e.message); } 目前我们可能得到的系统异常主要包含以下6种: EvalError : raised when an error occurs executing code in eval() RangeError : raised when a numeric variable or parameter is outside of its valid range ReferenceError : raised when de-referencing an invalid reference SyntaxError : raised when a syntax error occurs while parsing code in eval() TypeError : raised when

js作用域面试题大全

余生长醉 提交于 2020-03-04 17:06:17
什么是作用域: 浏览器给js的生存环境叫作用域。 什么是变量提升: Js 代码执行前,浏览器会给一个全局作用域 window Window 分两个模块一个是存储模块一个是执行模块 存储模块找到所有的 var 和 function 关键字给这些变量添加内存地址 执行模块,代码从上到下执行,遇到变量就会去存储模块查找,有和没有 有就看你赋值没有,赋值了就是后面的值没有赋值就是 undefined 。 没有结果就是 xxx is not defined 什么是原型链: 函数内部的变量被使用时,首先会在自己的私有作用域下查找是否有这个变量,有就直接使用,没有就向他的上一级查找,父级有就使用父级的,父级没有就以此继续向上查找直到查找带window有就使用没有就是is not defined。这种查找机制我们叫原型链。 案例分析 函数归属谁,跟她在哪调用没有关系,而是在哪定义有关。 函数外的变量叫全局变量,函数内的变量叫私有变量。 看变量归谁,看他在哪个作用域下声明。 360经典面试题 + function (){ console .log(a) var a = 5 ; function a (){} console .log(a) function b (){} b = 6 console .log(b) var c = d = b }() console .log(d) console

JS异常

余生长醉 提交于 2020-03-04 16:43:25
当 JavaScript 引擎执行 JavaScript 代码时,会发生各种错误。 可能是语法错误,通常是程序员造成的编码错误或错别字。 可能是拼写错误或语言中缺少的功能(可能由于浏览器差异)。 可能是由于来自服务器或用户的错误输出而导致的错误。 当然,也可能是由于许多其他不可预知的因素。 当错误发生时,当事情出问题时,JavaScript 引擎通常会停止,并生成一个错误消息。 描述这种情况的技术术语是:JavaScript 将 抛出 一个错误。 try 和 catch try 语句允许我们定义在执行时进行错误测试的代码块。 catch 语句允许我们定义当 try 代码块发生错误时,所执行的代码块。 JavaScript 语句 try 和 catch 是成对出现的。 语 法: try { ... //异常的抛出 } catch(e) { ... //异常的捕获与处理 } finally { ... //结束处理 } Throw 语句 throw 语句允许我们创建自定义错误。 正确的技术术语是:创建或 抛出异常 (exception)。 如果把 throw 与 try 和 catch 一起使用,那么您能够控制程序流,并生成自定义的错误消息。 语法 throw exception 异常可以是 JavaScript 字符串、数字、逻辑值或对象。 function myFunction()

js中的原型对象/prototype

自作多情 提交于 2020-03-04 16:30:38
前置任务 在说原型对象是什么之前,我们先讨论一下 对象 是什么东西 在说对象是什么之前,我们又得讨论一下 引用类型 引用类型 首先,js 中变量的值分两种类型 引用类型 值类型 关于这两种类型,我们需要从内存的角度来看 var num = 9527 //值类型 var str = "一段字符串" // 值类型 var obj = { // 引用类型 attr_1:"qwer", attr_2:"df" } 上面这些数据,在内存中可能是这样的 可以看到 值类型的 num 和 str 两个变量,变量名直接对应具体值 引用类型的 obj 这个变量对应的是一段地址,而这个地址的位置存的才是真正的obj的具体值(对象) 至于为什么要这么存,这跟内存的管理有关就不展开说,简单的 你妈妈给你生了五个可爱的妹妹 for(var i=0;i<5;i++){ var 妹妹i号=new 妹妹() } 每个妹妹都是new出来的一个对象,她们都有一些属性,比如 js 妹妹1号:{ age:3 name:妹妹1号, parent:{ 妈妈:你的妈妈, 爸爸:你的爸爸 } } 每个妹妹的 age 和 name 属性都是不同的,而 parent 属性都是相同的,这时候如果每个妹妹都存一份 parent 就太浪费内存了,所以我们可以存个地址.内存中这个地址的位置存真正的 parent 信息