为什么oDIV不能声明成c 全局变量声明

独特的见解,不一样的构思,奇特的想法,囊括自己的兴趣爱好以及工作经验...
js面试题总结
以下都是整理出来的JS面试题,答案仅供参考。
1、截取字符串abcdefg的efg
alert('abcdefg'.substring(4));
2、判断一个字符串中出现次数最多的字符,统计这个次数
/*var str = 'asdfssaaasasasasaa';
var json = {};
for (var i = 0; i & str. i++) {
if(!json[str.charAt(i)]){
json[str.charAt(i)] = 1;
json[str.charAt(i)]++;
var iMax = 0;
var iIndex = '';
for(var i in json){
if(json[i]&iMax){
iMax = json[i];
alert('出现次数最多的是:'+iIndex+'出现'+iMax+'次');*/
3、IE与FF脚本兼容性问题
/*obj.addEventListener(sEv, fn, false);
obj.attachEvent('on'+sEv,fn);
detachevet
removeEventListener
DOMContentLoaded
onreadystatechange
DOMMouseScroll FF
onmousewheel
event.wheelDelta 上滚120 下-120
event.detail
obj.getCurrentStyle[attr]
getComputedStyle(obj,false)[attr]
XMLHttpRequest
ActiveXObject('Mircorsoft.XMLHttp')
FF本地能设置读取cookie 其他不行
srcElement||target
toElement||relatedTarget
obj.setCapture();只有ie认
obj.releaseCapture();*/
4、规避javascript多人开发函数重名问题
/*命名空间
js模块化mvc(数据层、表现层、控制层)
变量转换成对象的属性
5、javascript面向对象中继承实现
/*function Person(name){
this.name =
Person.prototype.showName = function(){
alert(this.name);
function Worker(name, job){
Person.apply(this,arguments)
this.job =
for(var i in Person.prototype){
Worker.prototype = Person.
new Worker('sl', 'coders').showName();*/
6、FF下面实现outerHTML
/*var oDiv = document.createElement('div');
var oDiv1 = document.getElementById('div1');
var oWarp = document.getElementById('warp');
oWarp.insertBefore(oDiv, oDiv1);
oDiv.appendChild(oDiv1);
var sOut = oDiv.innerHTML;
oWarp.insertBefore(oDiv1, oDiv);
oWarp.removeChild(oDiv);
alert(sOut);*/
7、编写一个方法 求一个字符串的字节长度;
//假设一个中文占两个字节
/*var str = '22两是';
alert(getStrlen(str))
function getStrlen(str){
var json = {len:0};
var re = /[\u4e00-\u9fa5]/;
for (var i = 0; i & str. i++) {
if(re.test(str.charAt(i))){
json['len']++;
return json['len']+str.
8、编写一个方法 去掉一个数组的重复元素
/*var arr = [1,2,3,1,43,12,12,1];
var json = {};
var arr2 = [];
for (var i = 0; i & arr. i++) {
if(!json[arr[i]]){
json[arr[i]] =
json[arr[i]] =
if(json[arr[i]]){
arr2.push(arr[i]);
for (var i = 0; i & arr. i++) {
if(!aa(arr[i], arr2)){
arr2.push(arr[i])
function aa(obj, arr){
for (var i = 0; i & arr. i++) {
if(arr[i] == obj)
alert(arr2)*/
9、写出3个使用this的典型应用
事件: 如onclick
this-&发生事件的对象
this-&new 出来的object
call/apply
改变this*/
10、如何深度克隆
/*var arr = [1,2,43];
var json = {a:6,b:4,c:[1,2,3]};
var str = 'sdfsdf';
var json2 = clone(json);
alert(json['c'])
function clone(obj){
var oNew = new obj.constructor(obj.valueOf());
if(obj.constructor == Object){
for(var i in obj){
oNew[i] = obj[i];
if(typeof(oNew[i]) == 'object'){
clone(oNew[i]);
11、JavaScript中如何检测一个变量是一个String类型?请写出函数实现
// typeof(obj) == 'string'
// obj.constructor == S
12、网页中实现一个计算当年还剩多少时间的倒数计时程序,要求网页上实时动态显示“××年还剩××天××时××分××秒”
/*var oDate = new Date();
var oYear = oDate.getFullYear();
var oNewDate = new Date();
oNewDate.setFullYear(oYear, 11, 31, 23, 59, 59);
var iTime = oNewDate.getTime()-oDate.getTime();
var iS = iTime/1000;
var iM = oNewDate.getMonth()-oDate.getMonth();
var iDate =iS*/
1、你能描述一下你制作一个网页的工作流程吗?
2、你能描述一下渐进增强和优雅降级之间的不同吗?
3、请解释一下什么是语义化的HTML。
4、你如何对网站的文件和资源进行优化?
5、为什么利用多个域名来存储网站资源会更有效?
//确保用户在不同地区能用最快的速度打开网站,其中某个域名崩溃用户也能通过其他郁闷访问网站
6、请说出三种减低页面加载时间的方法
/*1、压缩css、js文件
2、合并js、css文件,减少http请求
3、外部js、css文件放在最底下
4、减少dom操作,尽可能用变量替代不必要的dom操作*/
7、什么是FOUC?你如何来避免FOUC?
/*由于css引入使用了@import 或者存在多个style标签以及css文件在页面底部引入使得css文件加载在html之后导致页面闪烁、花屏
用link加载css文件,放在head标签里面*/
8、文档类型的作用是什么?你知道多少种文档类型?
/*影响浏览器对html代码的编译渲染
9、浏览器标准模式和怪异模式之间的区别是什么?
//盒模型解释不同
10、 你使用过那些Javascript库?
//jquery seajs yui
11、哈希表
//具有散列(映射)特性的数据模型
//子函数能被外部调用到,则该作用连上的所有变量都会被保存下来。
13、请解释什么是Javascript的模块模式,并举出实用实例。
/*js模块化mvc(数据层、表现层、控制层)
命名空间*/
14、你如何组织自己的代码?是使用模块模式,还是使用经典继承的方法?
/*对内:模块模式
对外:继承*/
15、你如何优化自己的代码?
/*代码重用
避免全局变量(命名空间,封闭空间,模块化mvc..)
拆分函数避免函数过于臃肿
16、你能解释一下JavaScript中的继承是如何工作的吗?
/*子构造函数中执行父构造函数,并用call\apply改变this
克隆父构造函数原型上的方法*/
17、useraget.nav
18、请尽可能详尽的解释AJAX的工作原理。
/*创建ajax对象(XMLHttpRequest/ActiveXObject(Microsoft.XMLHttp))
判断数据传输方式(GET/POST)
打开链接 open()
发送 send()
当ajax对象完成第四步(onreadystatechange)数据接收完成,判断http响应状态(status)200-300之间或者304(缓存)执行回调函数*/
没有更多推荐了,java中全局变量为什么不能先声明再赋值?
[问题点数:0分,结帖人blueswordsman]
本版专家分:0
结帖率 50%
CSDN今日推荐
本版专家分:974
结帖率 96.3%
本版专家分:64624
2011年6月 Java大版内专家分月排行榜第一
2012年7月 Java大版内专家分月排行榜第三2011年11月 Java大版内专家分月排行榜第三2007年12月 Java大版内专家分月排行榜第三2007年10月 Java大版内专家分月排行榜第三
本版专家分:186
本版专家分:0
结帖率 50%
本版专家分:64624
2011年6月 Java大版内专家分月排行榜第一
2012年7月 Java大版内专家分月排行榜第三2011年11月 Java大版内专家分月排行榜第三2007年12月 Java大版内专家分月排行榜第三2007年10月 Java大版内专家分月排行榜第三
本版专家分:0
结帖率 50%
本版专家分:64624
2011年6月 Java大版内专家分月排行榜第一
2012年7月 Java大版内专家分月排行榜第三2011年11月 Java大版内专家分月排行榜第三2007年12月 Java大版内专家分月排行榜第三2007年10月 Java大版内专家分月排行榜第三
本版专家分:4729
2013年4月 扩充话题大版内专家分月排行榜第二
本版专家分:945
本版专家分:55
本版专家分:0
本版专家分:0
本版专家分:0
本版专家分:178
本版专家分:0
结帖率 50%
匿名用户不能发表回复!|
CSDN今日推荐&&&&&& 用C语言编写程序的时候,我们经常会遇到这样一种情况:希望在头文件中定义一个全局变量,然后包含到两个不同的c文件中,希望这个全局变量能在两个文件中共用。
  举例说明:项目文件夹project下有main.c、common.c和common.h三个文件,其中common.h文件分别#include在main.c和common.c文件中。现在希望声明一个字符型变量key,在main.c和common.c中公用。
  有人想,既然是想两个文件都用,那就在common.h中声明一个unsigned char key,然后由于包含关系,在main.c和common.c中都是可见的,所以就能共用了。
&&&&& 想起来确实有道理,但是实际写出来,我们发现编译的时候编译器提示出错,一般提示大概都类似于:Error: L6200E: Symbol key multiply defined (by common.o and main.o).也就是说编译器认为我们重复定义了key这个变量。这是因为#include命令就是原封不同的把头文件中的内容搬到#include的位置,所以相当于main.c和common.c中都执行了一次unsigned char key,而C语言中全局变量是项目内(或者叫工程内)可见的,这样就造成了一个项目中两个变量key,编译器就认为是重复定义。
&&&&& 正确的解决办法:使用extern关键字来声明变量为外部变量。具体说就是在其中一个c文件中定义一个全局变量key,然后在另一个要使用key这个变量的c文件中使用extern关键字声明一次,说明这个变量为外部变量,是在其他的c文件中定义的全局变量。请注意我这里的用词:定义和声明。例如在main.c文件中定义变量key,在common.c文件中声明key变量为外部变量,这样这两个文件中就能共享这个变量key了。
&&&&(1)main.c文件
& #include "common.h" &unsigned char
  (2)common.c文件:
& #include "common.h"  extern unsigned char
&& 其实就是变量定义和变量声明的区别,变量定义使用&数据类型+变量名称&的形式,编译器需要给他分配内存单元的;而变量声明使用&extern 变量类型+变量名称&的形式,是告诉编译器我这个变量将在其他外部c文件中定义,我这里只是在外部用它。编译器就不给他分配内存空间,而等到真正遇到变量定义的时候再给他分配内存空间。
&&&&&1、普通变量定义成全局变量&&&&&如果是普通类型,完全可以不用*.h文件,直接在*.c文件中定义,在调用文件处用extern 声明,因为对于普通类型,编译器是可以识别的。比如在一个 my.c文件中,我定义了char name[10];那么在别的文件中只要用extern char name[](由于是声明,一位数组可以省略大小,但不建议用指针,比较指针和数组是两回事)外部声明就可以了,告诉编译器这个变量我已经定义过了,具体怎样,你慢慢找吧。这符合常理,因为char是编译器能自主识别的类型。&&&&&2、自定义结构体类型定义成全局变量&&&&&不同于普通类型,如果不预先通知编译器,编译器是不会识别你自定义的类型的。这个时候,*.h文件便出现了。不是定义结构类型不占内存吗?那好,我大结构体的定义放在*.h文件中,这样一来,无论你incude无数次,内存都不会被占用的。而且这样还有个好处,在别的文件中可以include这个*.h文件,这样,在这个文件中,编译器就可以识别你的自定义类型了,目的不就达到了?&&假如我在global.h中定义了typedef struct _POSITION{&&&&&&&&&&&&&&&&}POSITION;那么我可以在一个global.c文件中实现全局变量的定义,不过要include那个*.h文件,比如/* ***global.c ******* */ include &global.h&POSITION current,;&&这样就定义了cunrrent这个变量,在别的文件中引用这个变量时,只要extern POSITION current;进行声明,然后就可以用了,不过这个文件也还得include "global.h" 因为如果不包含,在这个文件中是不识别POSITION类型的。
1.如何引用一个已经定义过的全局变量?   
答:extern  可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个编写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。
2.全局变量可不可以定义在可被多个.C文件中?为什么?   
答:可以,在不同的C文件中以static形式来声明同名全局变量。   可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错。
阅读(...) 评论()为什么oDIV不能声明成全局变量 _ 安康汽车网
为什么oDIV不能声明成全局变量
var timer=//全局变量程序没有错
这个不是全局
全局变量定义 不加var
程序表面上看没问题,但仔细思索就发现问题所在了;当onmouseover 没执行完便立即执行onmouseout 或当onmouseout 没执行完便立即执行onmouseover ,发现没问题就在这,这个瞬间你的odiv.style.width是多少呢?接着就会出现odiv.offsetWidth永远也不等于itarget的情况只要把两个判断条件改成odiv.offsetWidth &= itarget ,odiv.offsetWidth &= itargetBUG就没了还有一点就是要在startMove();前加上clearInterval(timer);timer定义成全局变量,不然一个setInterval没终止又来一个setInterval肯定会出BUG的
因为oDiv只存在在window.addEventListener的那个匿名函数中 toRed及toGreen之所以能够使用this指向操作元素是因为这是EventListener的触发规则就是这麽设计的 this不就是指代的oDiv 严格来讲这是不对的, 是this和oDiv在当前代码中都指向同一个元素
程序表面上看没问题,但仔细思索就发现问题所在了; 当onmouseover 没执行完便立即执行onmouseout 或当onmouseout 没执行完便立即执行onmouseover ,发现没问题就在这,这个瞬间你的odiv.style.width是多少呢? 接着就会出现odiv.offsetWidth永...
它只限于在本函数中使用,所以在window.onload 和 startMove 两函数中分别都声明了oDiv 变量,或者把oDiv 在全局 最开始的时候声明一遍他们两个函数就可以共用了,...
如果用var aBtn=oDiv.getElementsByTagName('input')的话,假如页面没有加载完成的话,aBtn的值是为null的,所以用var aBtn = null作为全局变量,并且在onload事件里面为aBtn赋值,目的就是为了能够正确获取到对应的值。 当使用var aBtn = null...
var odiv=document.querySelector('#div2');var arr=[];var chz=odiv.offsetLvar timer=for(var i=20;i&0;i=i-2){arr.push(i,-i);}arr.push(0);var num=0;odiv.onclick=function(){//var num=0;为什么放在这就可以重复的点击有效;放在...
可以。2种问题 下边直接上代码. 1.// 全局变量和局部变量的变量名相同 输出结果依次为: 第一次输出 第二次输出 2.//第二种情况只有全局变量 第一次输出: 第二次输出:
js变量的声明,放在函数外,就是全局变量;放在函数内的变量,只在该函数里以及这个函数下面的作用域能使用。 出现放在函数外出错的原因是,div1是一个html的节点,这个节点只有在它加载完成后才能使用。但是在该加点加载完成前就去使用了。这个...
这里为什么在 tocolor的函数里前面已经获取了oDiv,为什么还要再获取多一次??...这是变量的作用域问题。你把他设置成全局变量就不用二次取了。不同函数里定义...
你把str两边的"打成了“,而js把它理解成了‘+str+’字符串,你换一下就可以了
var timer=//全局变量程序没有错 这个不是全局 全局变量定义 不加var
返回主页:
本文网址:http://www.0915auto.cn/view-.htmlJS中全局变量与局部变量怎么设置?【javascript吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:162,734贴子:
JS中全局变量与局部变量怎么设置?收藏
&style type=&text/css&&body{margin:0;padding:0;}#div2{width:100height:100position:top:500left:500 background:}&/style&&/head&&body&&div id='div2'&&/div&&script&var odiv=document.querySelector('#div2');var arr=[];var chz=odiv.offsetLvar timer=for(var i=20;i&0;i=i-2){arr.push(i,-i);}arr.push(0);var num=0;odiv.onclick=function(){//var num=0;为什么放在这就可以重复的点击有效;放在上面只能点一次;num不是应该能按作用域链找上去的吗?timer=setInterval(function(){odiv.style.left=chz+arr[num]+'px';num++;if(num==arr.length){clearInterval(timer);}},30);}&/script&&/body&
登录百度帐号

我要回帖

更多关于 js声明全局变量 的文章

 

随机推荐