JS学习 变量的作用域等 实现简单的玛丽小游戏
来源:互联网 发布:java和php哪个更有发展前景 编辑:程序博客网 时间:2024/04/28 12:33
u js的闭包
js的闭包问题
1. js的变量作用域
代码:
<html>
<head>
<metahttp-equiv="content-type"content="text/html;charset=utf-8"/>
<scripttype="text/javascript">
/*
var a=90; //定义一个全局变量
function test(){
a=123; //使用外层的 a变量
}
test();
document.write("a="+a);*/
/* var a=90; //定义一个全局变量
function test(){
var a=123; //定义一个局部变量
}
test();
document.write("a="+a);*/
/* a=90; //没有var ,就会试着去找(父函数 的 a),如果找不到就创建 a
function test(){
a=123; //没有var ,就会试着去找(父函数/外层 的 a),如果找不到就创建 a
}
test();
document.write("a="+a);*/
//测试一下,看看大家理解否?
a=20;
function test1(){
var a=700;
function test2(){
a=890;//如果没 var ,则会到父函数去,找a,找到就使用父函数的a,否则创建
}
return test2;
}
var var1=test1();
var1();
document.write(a);
</script>
</html>
☞
① js允许函数中有函数
② 如果使用变量,如果该变量有var ,则表示创建全新的变量 ,如果该变量是直接写在页面,则我们认为是全局变量,否则是局部变量, 如果没有带var关键字, 则js引擎会这样处理: 首先到父函数去找有没有该变量,如果有,则使用,如果没有则创建之.
function f1(){
//var n=999;//局部变量
n=999;//全局变量
}
f1();
alert(n);
③ 上面的代码说明,如果在一个函数中,直接使用 比如
n=900; 相当于创建了一个全局变量.
u js中如何解决从外部读取内部函数的局部变量
function test1(){
var n=90;//布局变量
}
alert(n) //错误
解决方法->闭包
function test1(){
var n=90;
//test1函数的内部函数,可以访问 var n
funciton test2(){
window.alert(n++);
}
//把内部函数test2返回外部调用者
return test2;
}
var res=test1();//调用test1 ,返回 test2函数
这时res就是test1内部函数 test2别名
res();
闭包: 你可以这样理解 :test2()实现闭包
u 闭包的主要用处是
1. 把局部变量保存在内存中,不让垃圾回收机制,将其回收.
2. 让外部去访问内部函数的布局变量.
u js中函数名不能重复
1. 在不同文件中,可以有相同的函数名.
2. 在不同父函数(类), 即使在同一个页面,可以有相同函数,比如下面代码
abc.html
functiontest(){}
functino test2(){
functionsayhello(){
}
}
function test3(){
functionsayhello(){
}
}
abc2.html
functiontest(){}
玛丽小游戏
<html><head><meta http-equiv="content-type" content="text/html;charset=utf-8"/><script type="text/javascript">//定义Mariofunction Mario(x,y){this.x=x;//mario的横坐标this.y=y;//mario的纵坐标//向右移动this.moveRight=function(){//alert("mari向右移动");//真的动.//获取小人图片var mario_img=document.getElementById("mario");//获取当前的leftvar mario_img_left=mario_img.style.left;//13px//window.alert(mario_img_left);//从mario_img_left 中获取数字部分 "13px" substring(0,2)mario_img_left=mario_img_left.substring(0,mario_img_left.length-2);mario_img.style.left=parseInt(mario_img_left)+30+"px";//window.alert("mario_img_left="+mario_img_left);}//向左移动//向下移动//向上移动}//这是mario对象var mario=new Mario(1,1);//响应用户点击function move(direct){switch(direct){case "r"://window.alert("希望小人向右");//直接控制小人的动作mario.moveRight();break;case "l":window.alert("希望小人向左");break;case "up":window.alert("希望小人向上");break;case "down":window.alert("希望小人向下");break;default:window.alert("方向不对");break;}}</script><input type="button" onclick="move('r')" style="position:absolute;left:600px;top:100px" value="-->"/><div style="width:500px;height:400px;border:1px red solid"><img src="mario.png" id="mario" width="40px" style="position:absolute;left:13px;top:17px"/><img src="1.bmp" id="torise" width="40px" style="position:absolute;left:303px;top:317px"/></div></html>
- JS学习 变量的作用域等 实现简单的玛丽小游戏
- JS实现简单的贪吃蛇小游戏
- js变量的作用域
- 变量的作用域js
- js的变量作用域
- js变量的作用域
- js 变量的作用域
- js的变量作用域
- JS的变量作用域
- JS的变量作用域
- 用JS实现简单的猜数小游戏
- js,html实现简单的h5小游戏点亮所有的灯小游戏源码
- JavaScript实现超级玛丽小游戏
- JS的解析机制(作用域、变量提升等)和两个例子
- JS学习-变量作用域
- js中变量的作用域
- js变量的作用域测试
- js中变量的作用域
- Java线程之Semaphore
- objective c判断中英文混合的字符长度的两种方法
- GOOGLE C++编程风格指南(四)
- poj百练 4013 scanf 和printf的问题
- 九度OJ 题目1099:后缀子串排序
- JS学习 变量的作用域等 实现简单的玛丽小游戏
- shell中括号的特殊用法
- 用SWT可视化工具快速开发GUI应用
- objective-c:读取和写入plist文件,代码在Mac和iPhone中均适用。
- IT职业发展方向大全
- linux用户管理-4
- Scala的几件非常爽的事情 1
- 离开一线企业,你算老几?(上)
- Struts2输入校验