php.de

Zurück   php.de > Webentwicklung > JavaScript, Ajax und mehr

JavaScript, Ajax und mehr dynamisches Scripten und Interaktion auf Clientebene

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 13.07.2011, 13:05  
Benutzer
 
Registriert seit: 18.04.2010
Beiträge: 35
PHP-Kenntnisse:
Anfänger
F234k befindet sich auf einem aufstrebenden Ast
Standard JS: Deklarationen mit "var" heute noch notwendig?

Der Titel sagt eigentlich schon alles. Mir ist aufgefallen, dass Javascript in vielen aktuellen Browsern auch ohne die Deklaration von Variablen mit "var" funktioniert. Kann man soweit gehen und diese grundsätzlich weglassen, ohne User auszugrenzen?
F234k ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 13.07.2011, 13:08  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.266
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Das liegt daran, dass JavaScript sehr tolerant ist. Was JS wirklich über deinen Code denkt, kannst du so rausfinden:

Code:
<script type="text/javascript">
// <![CDATA[
	"use strict";
	hello = "world";
// ]]>
</script>
Zitat:
Uncaught ReferenceError: hello is not defined
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Alt 13.07.2011, 13:09  
fab
Erfahrener Benutzer
 
Benutzerbild von fab
 
Registriert seit: 28.07.2010
Beiträge: 2.308
PHP-Kenntnisse:
Fortgeschritten
fab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblick
Standard

Das hat nichts mit Browsern zu tun, sondern sind zwei unterschiedliche Dinge. Mit var: nur im aktuellen Scope gültig. Ohne var: global. Du solltest also var aus dem Grund nicht weglassen weil es unsaubere Programmierung ist, die zu Kompatibilitätsproblemen führen kann.

Edit: @Chriz das ist natürlich ein noch überzeugenderes Argument

Und noch ein Beispiel zum Verständnis von globals in javascript:
Code:
function f()
{
  foo = 1;
}
f();
alert(window.foo); // 1
(Im Browser ist window das globale Objekt)

Geändert von fab (13.07.2011 um 13:12 Uhr).
fab ist offline   Mit Zitat antworten
Alt 13.07.2011, 13:13  
Benutzer
 
Registriert seit: 18.04.2010
Beiträge: 35
PHP-Kenntnisse:
Anfänger
F234k befindet sich auf einem aufstrebenden Ast
Standard

Vielen dank, beides ist sehr hilfreich.
F234k ist offline   Mit Zitat antworten
Alt 13.07.2011, 14:28  
Neuer Benutzer
 
Benutzerbild von bsinfosys
 
Registriert seit: 13.07.2011
Beiträge: 1
PHP-Kenntnisse:
Fortgeschritten
bsinfosys befindet sich auf einem aufstrebenden Ast
Standard

Was wir auch schon beim Internet Explorer hatten, dass wenn eine Variable, die nicht in einem Funktions-Scope steht, generell auch ein var vor sich stehen haben sollte bei der ersten Definition. Ist dem nicht so, murrt der Internet Explorer sporadisch. Soweit ich weiß, gibt es keinen Nachteil, wenn man einer Variable außerhalb eines Funktionsrumpfes trotzdem ein "var" vorstellt.
bsinfosys ist offline   Mit Zitat antworten
Alt 13.07.2011, 15:07  
Supermoderator HD
 
Benutzerbild von Manko10
 
Registriert seit: 16.03.2008
Beiträge: 8.706
PHP-Kenntnisse:
Fortgeschritten
Manko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende Zukunft
Standard

Außerhalb jeglicher Funktionen heißt: im window-Scope, also global (privater Member von window).
Ich kann auch nur empfehlen, var zu verwenden. Es ist nicht nur unsauber, es wegulassen, es kann dich mitunter auch Stunden des Debuggens kosten, besonders wenn du mit Closures arbeitest. Ich weiß noch, wie ich ewig nach dem Fehler gesucht habe, weil meine Variable fehlerhafte Objektreferenzen enthielt. Es stellte sich dann irgendwann nach langer Suche heraus, dass ich lediglich das var vergessen hatte und ich somit mit einem globalen Objekt arbeitete, das natürlich in allen Kontexten verfügbar war.
__________________
Refining Linux Advent Calendar series “24 Outstanding ZSH Gems
Manko10 ist offline   Mit Zitat antworten
Alt 13.07.2011, 15:22  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
"use strict";
Krass, das kannte ich ehrlich ja noch gar nicht! Ist ja ne sonderbare Notation.

Zitat:
It's a new feature of ECMAScript5. John Resig wrote up a nice summary of it.
Frag mich, warum man das nicht ordentlich gelöst hat. Hier ist noch ne Quelle: http://hacks.mozilla.org/2011/01/ecm...-in-firefox-4/

*Bookmark*
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 13.07.2011, 15:31  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von nikosch Beitrag anzeigen
Ist ja ne sonderbare Notation.
[...]
Frag mich, warum man das nicht ordentlich gelöst hat.
Abwärtskompabilität.

Es muss am Anfang des Scriptes stehen, sonst kann es ja keine sinnvolle Wirkung entfallen.
An der Stelle aber etwas zu notieren, was ältere Browser (bzw. auch noch aktuelle) als fehlerhaft ansehen würden, wäre fatal - sofortiger Scriptabbruch, und damit von der Funktionalität des Scriptes gar nichts mehr übrig.
"use strict"; - das ist ein simpler Ausdruck, an dem auch JS-Parser der ersten Generation(en) nichts zu meckern haben.
Allerdings ist es auch nur ein Ausdruck, ein simples Textliteral - und sollte als solches eigentlich keinen Einfluss auf die Abarbeitung haben.
Aber hey, es ist ein Kompromiss.
Alternative wäre vielleicht ein Kommentar gewesen - aber da hast du das gleiche Problem, eine solche Bedeutung sollte der eigentlich nicht transportieren. Außerdem hat der Kommentar das Problem, dass er häufig von JS-Minifiern weggeputzt werden wird. Diese „Schwäche“ hat der Ausdruck nicht.
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline   Mit Zitat antworten
Alt 13.07.2011, 15:33  
Erfahrener Benutzer
 
Registriert seit: 11.04.2011
Beiträge: 260
PHP-Kenntnisse:
Fortgeschritten
lcrash wird schon bald berühmt werden
Standard

Über "use strict"; wurde viel diskutiert und man kam zu dem Schluss, dass die kompatibelste Lösung ist.

Viel mehr zum Strict mode gibt es hier: https://developer.mozilla.org/en/JavaScript/Strict_mode
lcrash ist offline   Mit Zitat antworten
Alt 13.07.2011, 16:02  
Erfahrener Benutzer
 
Registriert seit: 28.05.2008
Beiträge: 2.094
PHP-Kenntnisse:
Fortgeschritten
rudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nett
Standard

Generell zu empfehlen: http://jshint.com/

Zitat:
Allerdings ist es auch nur ein Ausdruck, ein simples Textliteral - und sollte als solches eigentlich keinen Einfluss auf die Abarbeitung haben.
Hat es aber - z.b. dieser Kontextwechsel von this (firefox + firebug zum ausprobieren):

Ohne Strict mode:
http://jsfiddle.net/rudygotya/uWy5V/2/

Mit strict mode:
http://jsfiddle.net/rudygotya/uWy5V/3/

von window zu undefined ..
__________________
++++ Wieder einer ins Netz gegangen: Phishers Fritz zufrieden ++++
Blog
rudygotya ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Datum wenn Heute dann Heute um 12:30 Pippo PHP Einsteiger 15 18.05.2011 12:04
[Erledigt] Ablaudatum 1 Tag nach Heute Matze84 PHP Tipps 2010 18 26.05.2010 13:48
Heute / gestern statt Datum phpstart PHP Tipps 2009 18 17.09.2009 18:16
Heute in einem Monat MerlinderZauberer Off-Topic Diskussionen 9 21.12.2007 16:06
Was darf man eigentlich heute alles benutzen? GSJLink Off-Topic Diskussionen 15 05.07.2007 11:24
News, heute, gestern oder vorgestern gschrieben? PHP Tipps 2005-2 3 18.07.2005 16:34
timestamp heute PHP Tipps 2005 10 18.05.2005 16:01

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
javascript var weglassen, javascript var notwendig, javascript var nötig, javascript use strict, deklarationen php, java script use strict bedeutung, var javascript notwendig, deklaration in php nötig, javascript uncaught referenceerror variable not defined, use strict uncaught reference, javascript this weglassen, sehr viele deklarationen php, javascript ist var nötig, javascript var deklaration notwendig, javascript \var\ verwenden? notwendig?, uncaught referenceerror: ajax is not defined, var nötig in php, var notwendig, javascript cdata notwendig, var javascript nötig

Alle Zeitangaben in WEZ +2. Es ist jetzt 11:19 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum