A. 学了JavaScript能做些什么
动手制作一些自己的小作品这样做有几个目的,第一个最重要的就是学习完基础知道并不代表你可以活学活用,一定要在制作作品的过程中了解还有那些更细节的知识点。第二,就是给自己积累编程思想相关的经验,这个尤其重要,为什么老牌的程序员一看到项目,脑海里就很快有了编程思路呢?就是这么来的。第三,在制作作品的过程中你会发现太多你从前没接触过的问题了,甚至可能完成一个有点难度的程序都是问题,那这代表什么?比如更细化的浏览器兼容性知识、代码执行效率知识等等,这方面你在日后的工作中会花掉你大量的精力,所以制作作品,在这些方面多磨练。第四,学习更高级的知识,比如面向对像,扩展库的使用,比如Jquery、Spry等等,另外还有自己的编程思想的建立。纯的学习JAVASCRIPT 基本除了计算什么也做不了(说的有些大了)
JavaScript需要和HTML CSS DHTML 浏览器内置对象等 结合来使用.
你看到网站页面的各种特效.还有无刷提交数据.等都会涉及到JavaScript.
比如说我们2个回答的页面右边 分享功能就涉及到JavaScript.它是一个浮动框框.通过JAVAScript计算和调用一些其他"程序"(怕你不明白说程序).让右边的分享 保持在上下同一位置 不管你怎么滚动页面
B. 前端开发核心js要怎么学
JS,全称为JavaScript,是一种客户端脚本语言,是前端开发学习内容当中的一个重要部分。
JavaScript可运行在所有主要平台的所有主流浏览器上,也可运行在每一个主流操作系统的服务器端上。现如今我们在为网站写任何一个主要功能的时候都需要有懂能够用JavaScript写前端的开发人员。我有web前端开发课程的全套视频资料,可以发给你自学。
要学的内容主要有:
①计算机基础以及PS基础
②前端开发基础(HTML5开发、JavaScript基础到高级、jQuery网页特效、Bootstrap框架)
③移动开发
④前端高级开发(ECMAScript6、Veu.js框架开发、webpack、前端页面优化、React框架开发、AngularJS 2.0框架开发等)
⑤小程序开发
⑥全栈开发(MySQL数据库、Python编程语言、Django框架等)
⑦就业拓展(网站SEO与前端安全技术)
互联网行业目前还是最热门的行业之一,学习IT技能之后足够优秀是有机会进入腾讯、阿里、网易等互联网大厂高薪就业的,发展前景非常好,普通人也可以学习。
想要系统学习,你可以考察对比一下开设有相关专业的热门学校,好的学校拥有根据当下企业需求自主研发课程的能力,能够在校期间取得大专或本科学历,中博软件学院、南京课工场、南京北大青鸟等开设相关专业的学校都是不错的,建议实地考察对比一下。
祝你学有所成,望采纳。
C. js 变量声明易混淆的几点知识
变量提升
变量与函数名提升优先级
js 作用域内有变量,这个很好理解,但有一些细节需要注意。
console.log(foo);//函数functionfoo(){
console.log("函数声明");
}
console.log(foo);//函数varfoo="变量";
console.log(foo);//变量
当变量名与函数名同名,且都提升上去了,那最终结果是哪个声明起作用呢?
有两个知识点:
1. var foo;并不会覆盖之前的变量
2. 函数提升优先级比变量提升要高,且不会被变量声明覆盖,但是会被变量赋值覆盖,所以上面的代码实际上是
functionfoo(){//优先级最高,提升到最前面
console.log("函数声明");
}varfoo;//只提升声明,不提升赋值,且不能覆盖函数声明console.log(foo);
console.log(foo);
foo="变量";//可以覆盖函数声明console.log(foo);
连等赋值的变量提升
varnum1=1;functionfn(num3){
console.log(num1);//outputundefined
console.log(num3);//output4
console.log(num4);//throwerror“num4isnotdefined”
console.log(num2);//throwerror“num2isnotdefined”
varnum1=num4=2;//js连等赋值num4不会被提升
num2=3;//没有var会挂载到全局作用域,但不会提升,所以之前会报错
varnum3=5;
}
fn(4);
if 判断内变量提升
if(true){
functionfn(){return1;}
}else{
if(false){
functionfn(){return2;}
}
}
console.log(fn.toString());
console.log(fn())
以下是从找到这个例子的原文中摘抄的内容:chrome和ie一均为function fn(){ return 2;},而firefox中依然报错。
可见三者处理并不相同。ff中会提前变量的声明,但不会提前块级作用域中的函数声明。而chrome和ie下就会提前块级作用域中的函数声明,而且后面的声明会覆盖前面的声明。
函数的作用域内赋值
在js中,提到变量赋值,就要先说作用域,而作用域,在es6之前,只有函数才会形成独立的作用域,然后函数的嵌套形成了 js 的作用域链。子作用域内可以访问父级作用域内的元素。函数的作用域在函数确定的时候就已经确定,与调用无关。
//test1varx=1;functionfoo(x){
varx=3;vary=function(){
x=2;
console.log(x)
}
y();
console.log(x);returny
}varz=foo()//22z()//2
这段函数会输出三个 2 ,指向同一个 x,甚至,将 x 改为对象,就更明显了
//test2varx="abc";functionfoo(x){
varx=c;vary=function(){
returnx;
}returny;
}varc={a:1}varz=foo();
varb=z();
console.log(b===c);//true
上面例子中,foo 函数执行后,返回 y 函数并赋值给 z,z 指向 y 函数(函数体),此时,z 并不在 foo 函数的作用域内,在此作用域不能访问到 x,但 z 只是引用类型数据的一个指针,只是同 x 指向了同一个对象而已。而执行 z 函数,则会返回 x 的值,这个值是函数 y 作用域内访问到的 x 的值,是根据函数的书写位置确定的作用域,并不会因为调用位置不同,而改变变量的指向。
但是同时要注意,虽然函数作用域在函数写出来时就已经确定,但具体的值却跟调用的时机有关。
//test3varx="abc";functionfoo(x){
varx=c;vary=function(){
x.a++;returnx;
}returny
}varc={a:1}varz=foo();
console.log(z())//{a:2}console.log(z())//{a:3}console.log(z())//{a:4}
这个例子中,输出的三次都是同一个对象,但输出的值不同,这是因为输出的时候的值不同,这就和调用时的实际值有关了。
D. 如何进一步提高自己的javascript能力
1、首先,基础知识点必须要熟悉;
2、其次,多接触新的项目,在实践中巩固自己学到的知识,会变通;
3、还有,多关注新技术、新特效,研究这些效果是怎样实现的,自己动手去试试看能否实现,切记眼高手低,不要觉得自己有思路就不去实际编程了,还是要动手去操作。
4、最后,多和高手交流。
E. js为什么覆盖感觉很难,应该怎么学习呢
其实只要你把最基本的那些东西学习好了,比如js的数据类型,以及所对应的方法(函数),至于高级部分,我觉得还是需要在前面基础知识熟透的情况下再去研究更高效些。
然后就是多敲代码,毕竟熟能生巧,推荐你去看下这个网站w3school-JavaScript教程学习,每一个知识点都基本有demo案例,你可以根据知识点在线编程学习;
最后就是要多做总结,注册个印象笔记,把你学到的东西放在里面,没事的时候就拿来复习复习绝对对你学习js有大帮助。
对了,个人感觉js这块廖雪峰大神讲得特别好,推荐你去看下。希望对你的js学习有所帮助。
F. js的小疑问
这是单纯的没有细读文档导致的问题
window.open(URL,name,features,replace)
参数 描述
URL 一个可选的字符串,声明了要在新窗口中显示的文档的URL。如果省略了这个参数,或者它的值是空字符串,那么新窗口就不会显示任何文档。
name 一个可选的字符串,该字符串是一个由逗号分隔的特征列表,其中包括数字、字母和下划线,该字符声明了新窗口的名称。这个名称可以用作标记<a>和<form>的属性target的值。如果该参数指定了一个已经存在的窗口,那么open()方法就不再创建一个新窗口,而只是返回对指定窗口的引用。在这种情况下,features将被忽略。
features 一个可选的字符串,声明了新窗口要显示的标准浏览器的特征。如果省略该参数,新窗口将具有所有标准特征。在窗口特征这个表格中,我们对该字符串的格式进行了详细的说明。
replace
一个可选的布尔值。规定了装载到窗口的URL是在窗口的浏览历史中创建一个新条目,还是替换浏览历史中的当前条目。支持下面的值:
true-URL替换浏览历史中的当前条目。
false-URL在浏览历史中创建新的条目。
重点在name参数
对于你的使用方式,name总是undefined,所以浏览器可以按照它的方式解析
在这个例子中,浏览器大概把undefined也视为特征值了,所以不会创建新窗口
你如果希望它永远都在不同的窗口打开的话,多传入个随机数就好
G. 关于js的一点小问题
function primeSum(k,i) 质数 求和 函数
var k=parseInt(document.getElementById('numA').value); //获取 numA的值
var i=parseInt(document.getElementById('numB').value); //获取 numB的值 document.getElementById('result').innerHTML = primeSum(k,i); //得出 质数 求和 并输出在 result上
如:
primeSum(3,2) 前面是 比3大的 质数 后面是位数 ,那么总数为 5+7 = 12
primeSum(3,3) 前面是 比3大的 质数 后面是位数 ,那么总数为 5+7+11 = 23
质数 是不能被整除的数
for (var a=2;a<k;a++)
{
if (k%a==0)//k>2
{
sum-=k;
i++;
break;
}
}
判断是否能被整除。
H. js如何学习 如何快速入门
j入门还是比较容易的,想要深入的话就需要一点时间,
系统的方法还是根据w3c的入门步骤去学,边学边做,
要经常写才行,当然没有人指导的话会走不少弯路。
你可以找一些视频教程来跟着学习,
也可以向身边的前端工程师朋友请教。
这个是我的博客网页链接里面有入门教程,
是经过我的系统分类了的,当然如果你一点基础都没有的话
还是去w3c网站上看教程
I. 如何正确学习JavaScript
JavaScript作为网站前端的核心知识是非常重要的,但是如何学习JavaScript是很多初学者面对的一个难题,下面我说一下个人对于如何学习JavaScript的一点心得,希望能帮到大家。
学习每个编程语言可能都要从基础的变量函数结构等学起,JavaScript相对于其他的编程语言在基础上有一些比较有特点的地方,这些东西是尤其需要我们注意的,比如说自调函数、比如说变量值为空不是null而是undefined的等,这些东西都是和主流的编程的语言如c++、java等是有区别的,所以想要学好JavaScript,这些基础的知识一定要把握好学习好才行。
2、关于学习JavaScript的进阶
JavaScript进阶知识更是有很多难理解的东西和不同于其他语言的东西,这些东西都是深入学习JavaScript的难点,简单的说一下JavaScript是基于对象的浏览器脚本语言,但是为了使JavaScript也能够支持面向对象编程,人们就使用了很多的方法来模拟面向对象的的特点,这些就变成了JavaScript的一些难点,比如说JavaScript的继承要借助原型、比如JavaScript的类需要使用构造函数来构造一个对象等,这些东西都是和其他支持面向对象的语言是不同的,所以就导致了一些难点。关于进阶学习JavaScript,还有JavaScript一些深入的知识需要去理解比如原型链和闭包、比如收函数的作用域执行流程和上下文,这些东西都是JavaScript比较深入的知识、
最后说明,JavaScript作为前端的核心语言绝对没有没有想象的那么简单,要想学好JavaScript除了以上提到的知识和注意点,还需要的就是多动手和实践,我们都知道网页上的所有特效都是借助JavaScript来实现,那么我们就需要在学习JavaScript的过程中多使用原生的JavaScript代码实现一些特效,当然学习使用jQuery等JavaScript类库进行开发也十分的重要,但是这绝对不能是取代我们学习JavaScript的方法。
J. Js编程语言中,什么叫匿名自我调用函数
匿名函数:就是没有函数名的函数。
函数的定义,大致可分为三种方式:
第一种:这也是最常规的一种
function double(x){
return 2 * x;
}
第二种:这种方法使用了Function构造函数,把参数列表和函数体都作为字符串,很不方便,不建议使用。
var double = new Function('x', 'return 2 * x;');
第三种:
var double = function(x) { return 2* x; }
注意“=”右边的函数就是一个匿名函数,创造完毕函数后,又将该函数赋给了变量square。
匿名函数的创建
第一种方式:就是上面所讲的定义square函数,这也是最常用的方式之一。
第二种方式:
(function(x, y){
alert(x + y);
})(2, 3);
这里创建了一个匿名函数(在第一个括号内),第二个括号用于调用该匿名函数,并传入参数。括号是表达式,是表达式就有返回值,所以可以在后面加一对括号让它们执行.
自执行的匿名函数
1. 什么是自执行的匿名函数?
它是指形如这样的函数: (function {// code})();
2. 疑问
为什么(function {// code})();可以被执行, 而function {// code}();却会报错?
3. 分析
(1). 首先, 要清楚两者的区别:
(function {// code})是表达式, function {// code}是函数声明.
(2). 其次, js"预编译"的特点:
js在"预编译"阶段, 会解释函数声明, 但却会忽略表式.
(3). 当js执行到function() {//code}();时, 由于function() {//code}在"预编译"阶段已经被解释过, js会跳过function(){//code}, 试图去执行();, 故会报错;
当js执行到(function {// code})();时, 由于(function {// code})是表达式, js会去对它求解得到返回值, 由于返回值是一 个函数, 故而遇到();时, 便会被执行.
另外, 函数转换为表达式的方法并不一定要靠分组操作符(),我们还可以用void操作符,~操作符,!操作符……
如:
!function(){
alert("另类的匿名函数自执行");
}();
匿名函数与闭包
闭包的英文单词是closure,这是JavaScript中非常重要的一部分知识,因为使用闭包可以大大减少我们的代码量,使我们的代码看上去更加清晰等等,总之功能十分强大。
闭包的含义:闭包说白了就是函数的嵌套,内层的函数可以使用外层函数的所有变量,即使外层函数已经执行完毕(这点涉及JavaScript作用域链)。
function checkClosure(){
var str = 'rain-man';
setTimeout(
function(){ alert(str); } //这是一个匿名函数
, 2000);
}
checkClosure();
这个例子看上去十分的简单,仔细分析下它的执行过程还是有许多知识点的:checkClosure函数的执行是瞬间的(也许用时只是0.00001毫秒),在checkClosure的函数体内创建了一个变量str,在checkClosure执行完毕之后str并没有被释放,这是因为setTimeout内的匿名函数存在这对str的引用。待到2秒后函数体内的匿名函数被执行完毕,str才被释放。
用闭包来优化代码:
function forTimeout(x, y){
alert(x + y);
}
function delay(x , y , time){
setTimeout('forTimeout(' + x + ',' + y + ')' , time);
}
/**
* 上面的delay函数十分难以阅读,也不容易编写,但如果使用闭包就可以让代码更加清晰
* function delay(x , y , time){
* setTimeout(
* function(){
* forTimeout(x , y)
* }
* , time);
* }
*/
匿名函数最大的用途是创建闭包(这是JavaScript语言的特性之一),并且还可以构建命名空间,以减少全局变量的使用。
var oEvent = {};
(function(){
var addEvent = function(){ /*代码的实现省略了*/ };
function removeEvent(){}
oEvent.addEvent = addEvent;
oEvent.removeEvent = removeEvent;
})();
在这段代码中函数addEvent和removeEvent都是局部变量,但我们可以通过全局变量oEvent使用它,这就大大减少了全局变量的使用,增强了网页的安全性。
我们要想使用此段代码:
oEvent.addEvent(document.getElementById('box') , 'click' , function(){});
var rainman = (function(x , y){
return x + y;
})(2 , 3);
/**
* 也可以写成下面的形式,因为第一个括号只是帮助我们阅读,但是不推荐使用下面这种书写格式。
* var rainman = function(x , y){
* return x + y;
* }(2 , 3);
在这里我们创建了一个变量rainman,并通过直接调用匿名函数初始化为5,这种小技巧有时十分实用。
var outer = null;
(function(){
var one = 1;
function inner (){
one += 1;
alert(one);
}
outer = inner;
})();
outer(); //2
outer(); //3
outer(); //4
这段代码中的变量one是一个局部变量(因为它被定义在一个函数之内),因此外部是不可以访问的。但是这里我们创建了inner函数,inner函数是可以访问变量one的;又将全局变量outer引用了inner,所以三次调用outer会弹出递增的结果。