why put $ with $self and $body? And is self the same as $self

JquerySyntax

Jquery Problem Overview


I'm learning jQuery by trying to understand other people's code. I ran into this:

jQuery.fn.myFunc = function(options, callback) {

//stuff

  jQuery(this)[settings.event](function(e) {
	var self = this,
	$self = jQuery( this ),
	$body = jQuery( "body" );
     //etc.
  }

//more stuff

}

My understanding is that $ refers to the jQuery object. So why put $ with $self and $body? And is self the same as $self?

Jquery Solutions


Solution 1 - Jquery

$self has little to do with $, which is an alias for jQuery in this case. Some people prefer to put a dollar sign together with the variable to make a distinction between regular vars and jQuery objects.

example:

var self = 'some string';
var $self = 'another string';

These are declared as two different variables. It's like putting underscore before private variables.

A somewhat popular pattern is:

var foo = 'some string';
var $foo = $('.foo');

That way, you know $foo is a cached jQuery object later on in the code.

Solution 2 - Jquery

This is pure JavaScript.

There is nothing special about $. It is just a character that may be used in variable names.

var $ = 1;
var $$ = 2;
alert($ + $$);

jQuery just assigns it's core function to a variable called $. The code you have assigns this to a local variable called self and the results of calling jQuery with this as an argument to a global variable called $self.

It's ugly, dirty, confusing, but $, self and $self are all different variables that happen to have similar names.

Solution 3 - Jquery

No, it certainly is not. It is just another variable name. The $() you're talking about is actually the jQuery core function. The $self is just a variable. You can even rename it to foo if you want, this doesn't change things. The $ (and _) are legal characters in a Javascript identifier.

Why this is done so is often just some code convention or to avoid clashes with reversed keywords. I often use it for $this as follows:

var $this = $(this);

Solution 4 - Jquery

self and $self aren't the same. The former is the object pointed to by "this" and the latter a jQuery object whose "scope" is the object pointed to by "this". Similarly, $body isn't the body DOM element but the jQuery object whose scope is the body element.

Solution 5 - Jquery

The dollarsign as a prefix in the var name is a usage from the concept of the hungarian notation.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestiondnagirlView Question on Stackoverflow
Solution 1 - JqueryDavid HellsingView Answer on Stackoverflow
Solution 2 - JqueryQuentinView Answer on Stackoverflow
Solution 3 - JqueryBalusCView Answer on Stackoverflow
Solution 4 - JqueryRichView Answer on Stackoverflow
Solution 5 - JqueryJanView Answer on Stackoverflow